我对rails非常新,并且已经创建了一个包含两个表的基本应用程序,但我还没弄清楚如何显示引用表的值而不是id。
我的两个表格是Genres
和Songs
,看起来像这样。
id | trackgenre | created_at | updated_at
----+-------------+----------------------------+-------------------------
1 | Classic | 2017-06-13 02:37:07.041974 | 2017-06-13 02:37:07.041974
2 | Rock | 2017-06-13 02:37:07.060634 | 2017-06-13 02:37:07.060634
3 | Hip-Hop | 2017-06-13 02:37:07.064877 | 2017-06-13 02:37:07.064877
4 | Alternative | 2017-06-13 02:37:07.067473 | 2017-06-13 02:37:07.067473
id | songtitle | artist | genre_id
----+-------------+----------------------------+---------------------------
1 | Loser | Beck | 4
2 | Jailhouse rock | Elvis Presley | 2
3 | My Way | Frank Sinatra | 2
我的song.rb
看起来像这样
class Song < ApplicationRecord
belongs_to :genre
end
和genre.rb
是
class Genre < ApplicationRecord
has_many :songs
end
现在,当我从前端获取数据时,我看到genre_id
而不是值。例如,如果我从我的Songs表中获取第二个项目,我会得到Jailhouse rock,Elvis Presley,2。我需要做些什么才能获得genre_id的值,即&#34; Rock&#34;显示在前端而不是这个数字2?
答案 0 :(得分:2)
我还没弄清楚如何显示引用表的值 而不是id
你只需要做
<%= @song.genre.trackgenre %>
其中@song
是Song
答案 1 :(得分:0)
如果您只是通过
从歌曲中提取第二项Song.second
这会给你genre_id
表中的Songs
。如果你想要这个类型的名字,或者在这种情况下是`trackgenre,你必须加入这些表:
Song.joins(:genre).select("songs.*", "genres.trackgenre").second
这将为您提供歌曲和流派名称的所有属性,即genre_id
和trackgenre
。如果不想genre_id
而只需要trackgenre
,则必须选择歌曲的属性。
Song.joins(:genre).select("songs.id", "songs.songtitle", "songs.artist", "genres.trackgenre").second