如何在rails中显示引用表的值?

时间:2017-06-23 05:03:46

标签: mysql ruby-on-rails ruby

我对rails非常新,并且已经创建了一个包含两个表的基本应用程序,但我还没弄清楚如何显示引用表的值而不是id。 我的两个表格是GenresSongs,看起来像这样。

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?

2 个答案:

答案 0 :(得分:2)

  

我还没弄清楚如何显示引用表的值   而不是id

你只需要做

<%= @song.genre.trackgenre %>

其中@songSong

的实例

答案 1 :(得分:0)

如果您只是通过

从歌曲中提取第二项
Song.second

这会给你genre_id表中的Songs。如果你想要这个类型的名字,或者在这种情况下是`trackgenre,你必须加入这些表:

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

这将为您提供歌曲和流派名称的所有属性,即genre_idtrackgenre。如果不想genre_id而只需要trackgenre,则必须选择歌曲的属性。

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