質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

Q&A

解決済

1回答

255閲覧

railsの2つのDB(1対多)の連携方法について

koichi8888

総合スコア24

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

0グッド

0クリップ

投稿2018/06/06 05:13

編集2018/06/08 05:44

前提・実現したいこと

下記の二つのDBを連携させる方法について教えてください。
実現したいことはnameの情報はCategoryDatumに格納されていて、GyomuDatum側では対応するIDを格納し、viewでnameカラムの情報を表示させたいです。
モデルファイルに記載する内容は下記に記載していますが、それ以降にどのような設定をすれば、良いかが分からず困っています。
ご教示頂ければ、大変助かります。

モデル名:GyomuDatum

IDcategory_id※外部キー
11
22

モデル名:Category

ID※主キーname
1ichiro
2taro

該当のソースコード

gyomu_datum.rb

Ruby

1class GyomuDatum < ActiveRecord::Base 2 3belongs_to :Category 4 5end 6

category.rb

Ruby

1class Category < ActiveRecord::Base 2 3has_many :GyomuData 4 5end

index.html.erb

Ruby

1 2<p class="rei1">データ一覧</p> 3<br> 4 5<!-- 権限によってデータ一覧の項目値を変更 --> 6 7<section> 8 9 <table class="type06"> 10 <thead> 11 12 <% if session[:authority] == "1" %> 13 14 <tr> 15 <th>管理ID</th> 16 <th>カテゴリ</th> 17 <th>発行会社</th> 18 <th>IPアドレス</th> 19 <th>対象サーバ</th> 20 <th>有効期限の開始日</th> 21 <th>有効期限の終了日</th> 22 <th>コメント</th> 23 <th>操作</th> 24 </tr> 25 26 </thead> 27 <tbody> 28 29 <% @items.each do |item| %> 30 <tr> 31 <td><%= item.manage_id %></td> 32 <td><%= item.category_id %></td> 33 <td><%= item.publish_corporation %></td> 34 <td><%= item.ip_address %></td> 35 <td><%= item.target_server %></td> 36 <td><%= item.start_date %></td> 37 <td><%= item.end_date %></td> 38 <td><%= item.comment %></td> 39 <td> 40 <%= link_to '[Edit]', edit_item_path(item), class: 'command' %> 41 <%= link_to '[Delete]', 42 item_path(item), 43 method: :delete, 44 class: 'command', 45 data: { confirm: 'データ削除しますか?' } %> 46 </td> 47 </tr> 48 49 <% end %> 50 51 52 <% elsif session[:authority] == "2" %> 53 54 <tr> 55 <th>管理ID</th> 56 <th>カテゴリ</th> 57 <th>発行会社</th> 58 <th>IPアドレス</th> 59 <th>対象サーバ</th> 60 <th>有効期限の開始日</th> 61 <th>有効期限の終了日</th> 62 <th>コメント</th> 63 </tr> 64 65 <% @items.each do |item| %> 66 <tr> 67 <td><%= item.manage_id %></td> 68 <td><%= item.category_id %></td> 69 <td><%= item.publish_corporation %></td> 70 <td><%= item.ip_address %></td> 71 <td><%= item.target_server %></td> 72 <td><%= item.start_date %></td> 73 <td><%= item.end_date %></td> 74 <td><%= item.comment %></td> 75 </tr> 76 77 <% end %> 78 79 <% else %> 80 81 <!-- データ一覧を表示しない --> 82 83 <% end %> 84 85 </tbody> 86 </table> 87 88</section> 89

補足情報(FW/ツールのバージョンなど)

・Apache
Server version: Apache/2.4.6 (CentOS)

・Rails
Rails 4.2.10

・OSバージョン
$ cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)

・Mysql
mysql Ver 14.14 Distrib 5.7.22, for Linux (x86_64) using EditLine wrapper

・Ruby
ruby 2.3.7p456 (2018-03-28 revision 63024) [x86_64-linux]

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

これでどや!

ruby

1data = GyomuDatum.find(1) 2puts data.CategoryData.name 3=> ichiro

なんや、全部のデータかい!

ruby

1datas = GyomuDatum.all 2datas.each{|data| puts data.CategoryData.name}

これで文句ないやろ
belongs_toに与える値は、スネークケースで書くんやぞ

Ruby

1belongs_to :category_data

投稿2018/06/07 03:59

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

koichi8888

2018/06/08 02:00

ご回答有難うございます。実現したいことはname_idからnameカラムのデータを表示させたいのですが、可能でしょうか。
退会済みユーザー

退会済みユーザー

2018/06/08 04:27

もちろんできるさ CategoryDatumモデルのテーブル名は、category_datumsでOK? ならname_idをcategory_datum_idに変えるべきだ 理由はわかるな? Railsはレールに乗ってこそ、その進化を発揮するからだ! あと自己紹介を忘れてた 俺はイノベーションインキュベーターのアーリックって言うんだ よろしくな!
koichi8888

2018/06/08 05:05 編集

ご回答ありがとうございます。カラム名はname_idのままで、ソースに追加したindex.html.erbのcategory_idをnameカラムのデータで表示したいのですが、可能でしょうか。 また、モデル名はcategory_datumからcategoryに変更しました。そのため、外部キーはモデル名+_idのcategory_idになります。
退会済みユーザー

退会済みユーザー

2018/06/08 08:37 編集

もちろんそれも可能だ! 変えたとほうが良いところがあるな rubyは、スネークケースを推奨しているからあまりキャメルケースを使っちゃダメだ ```ruby class GyomuDatum < ActiveRecord::Base belongs_to :category end ``` あとはこれで取得できるはずだ GyomuDatum.find(1).category.name => ichiro
koichi8888

2018/06/11 04:08

ご回答ありがとうございます。無事解決することができ、大変助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問