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

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

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

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

2746閲覧

Rails4 任意のカラムで表示する(モデルリレーション上で)

smith

総合スコア73

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2015/01/01 17:20

category tableにはnameカラムがあり、itemのshow画面(アイテム詳細画面)で表示をさせたいです。
item tableにはcategory_idとsub_category_idのカラムがありint型が入っています。
このカラムはuserの操作によって決定されたcategoryが入ります。(int型)
item tableにはint型でcategory tableのidが入っているため数字が表示されてしまいます。
これを category tableのカラムnameで表示するにはどうしたら良いでしょうか

lang

1 2 3 <li class="list-group-item"> 4 <strong>カテゴリ:</strong> 5 <%= @item.category_id %> 6 <%= @item.category_id%> 7 </li> 8 9 <li class="list-group-item"> 10 <strong>subカテゴリ:</strong> 11 <%= @item.sub_category_id %> 12 <%= @item.sub_category_id %> 13 </li> 14

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

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

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

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

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

guest

回答1

0

ベストアンサー

categoryとsub_categoryでそれぞれ次のようにすれば表示できます。

lang

1 2<%= @item.category.name %> 3 4<%= @item.sub_category.name %>

また、上記のようにするには前準備として、モデルでアソシエーションを定義しておく必要があります。

各モデル(各テーブル)の関係は、

  • itemとcategoryは「1対N」
  • itemとsub_categoryは「1対N」

という前提でアソシエーションを定義しています。

英語の単数形と複数形に注意してください。

lang

1# app/models/item.rb 2class Item < ActiveRecord::Base 3 belongs_to :category # item belongs_to :category (itemはcategoryに属する) 4 belogns_to :sub_category # item belogns_to :sub_cateogyr(itemはsub_categoryに属する) 5end 6 7# app/models/category.rb 8class Category < ActiveRecord::Base 9 has_many :items # category has_many items (categoryはたくさんのitemsを保持する) 10end 11 12# app/models/sub_category.rb 13class SubCategory < ActiveRecord::Base 14 has_many :items # sub_category has_many items (sub_categoryはたくさんのitemsを保持する) 15end

上記のようなアソシエーションを定義することで、各モデルから関連先のモデルを参照することが可能になります。
そのため、最初に記載した方法でcategoryのnameカラムを表示することができます。

lang

1$ rails console 2> item = Item.first 3> item.category # => itemが属する Categoryインスタンス 4> item.sub_category # => itemが属する SubCategoryインスタンス 5 6> item.category.name # => nameカラムの値 7> item.sub_category.name # => nameカラムの値

他にも、アソシエーションを使うことでいろいろと便利なことがあるので、
Rails Guides - ActiveRecordの関連付け(アソシエーション)
を一読するとここらへんの知識も含めいろいろと学べるかと思います。

投稿2015/01/01 22:20

shoji

総合スコア85

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

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

smith

2015/01/02 15:07

sub_category_idだけが表示されないのですが どうしたら良いでしょうか modelはsub_categoryがなく、下記のようなもcategory modelのみです。 id | parent_id | code | name +------------+-----------+---------+-------------- | 1 | | 0000000 | root | 8375840 | 1 | 0050000 | 家電製品 | 20068273 | 280649686 | 0600600 | 人文/社会 | 34598291 | 1 | 0030000 | キッズ | 77410569 | 959348699 | 0100600 | その他 | 108038766 | 959348699 | 0100400 | 靴
shoji

2015/01/02 15:24

次のようにしたらどうでしょうか。ちなみに、itemsテーブルにsub_category_id:integerとcategory_id:integerがあることが前提です。 ```lang-ruby class Item < ActiveRecord::Base belongs_to :category belongs_to :sub_category, foreign_key: :sub_category_id, class_name: 'Category' end ``` ちなみに、カテゴリーの階層構造を行いたいときに便利なgemがあります。 http://blog.takuyan.com/posts/2012/12/21/awesome-nested-set-requires-rebuild/
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問