如何在rails中显示引用表的值?
问题描述:
我是非常新的轨道,并做了两个表的基本应用程序,但我还没有想出如何显示引用表的值而不是id。 我的两张桌子是Genres
和Songs
,看起来像这样。如何在rails中显示引用表的值?
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
,而不是价值。例如,如果我从我的歌曲表中获取第二个项目,我会得到Jailhouse rock,Elvis Presley,2.我需要做些什么才能让genre_id的值为“Rock”,以显示在前端而不是这个数字2?
答
如果您只是通过
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
答
我还没有想出如何显示引用的表 而不是id的值
您需要做的仅仅
<%= @song.genre.trackgenre %>
凡@song
是实例Song
太棒了。但我一直认为通过关联完成连接,当我在模型文件中进行这些连接时... belongs_to:genre has_many:songs。不是这些连接表吗?对不起,如果我听起来像一个总noob。我只是假设铁轨有时会为我做所有事情。如果我想为我的数据库中的所有歌曲执行操作,我会在哪里进行连接? – craftdeer
belongs_to和has_many是基本定义可用于从多个关联表中提取属性的方法的关联。直到你使用'joins'方法,Rails才会为你加入表格。在你指定关联之后,Rails允许你使用'joins'或'includes'连接表。 要从'Song'和'Genre'中提取属性,您必须加入它们。 要提取具有流派名称的所有歌曲,请使用上面的查询并用'all'替换'second'。 'second'给你第二首歌,'all'给你所有的歌。 – moyinho20
真棒。谢谢你,先生 – craftdeer