2017-06-23 39 views
0

我是非常新的轨道,并做了两个表的基本应用程序,但我还没有想出如何显示引用表的值而不是id。 我的两张桌子是GenresSongs,看起来像这样。如何在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?

回答

0

如果您只是通过

Song.second 

取出由歌第二项这将使你genre_id这是在Songs表。如果你想在风格或在这种情况下`trackgenre的名字,你就必须加入表:

Song.joins(:genre).select("songs.*", "genres.trackgenre").second 

这将使你宋,流派名称,这意味着genre_idtrackgenre的所有属性。如果不想要genre_idtrackgenre,您将不得不选择歌曲的属性。

Song.joins(:genre).select("songs.id", "songs.songtitle", "songs.artist", "genres.trackgenre").second 
+0

太棒了。但我一直认为通过关联完成连接,当我在模型文件中进行这些连接时... belongs_to:genre has_many:songs。不是这些连接表吗?对不起,如果我听起来像一个总noob。我只是假设铁轨有时会为我做所有事情。如果我想为我的数据库中的所有歌曲执行操作,我会在哪里进行连接? – craftdeer

+0

belongs_to和has_many是基本定义可用于从多个关联表中提取属性的方法的关联。直到你使用'joins'方法,Rails才会为你加入表格。在你指定关联之后,Rails允许你使用'joins'或'includes'连接表。 要从'Song'和'Genre'中提取属性,您必须加入它们。 要提取具有流派名称的所有歌曲,请使用上面的查询并用'all'替换'second'。 'second'给你第二首歌,'all'给你所有的歌。 – moyinho20

+0

真棒。谢谢你,先生 – craftdeer

2

我还没有想出如何显示引用的表 而不是id的值

您需要做的仅仅

<%= @song.genre.trackgenre %> 

@song是实例Song