我是Rails的新手,所以我会尽我所能来解释这一点。
我有三个模特:艺术家,节日,和festival_artist
艺术家只包含一个ID和一个artist_name
fest只包含一个ID和一个festival_name
festival_artist包含一个ID、一个artist_id和一个festival_id
我使用脚手架创建了Fest,所以我的控制器和show.html.erb就在那里。
以下是我的模型:
class Artist < ApplicationRecord
belongs_to :festival_artist
end
class Fest < ApplicationRecord
belongs_to :festival_artist
end
class FestivalArtist < ApplicationRecord
has_many :artists
has_many :fests
end在我的fests_controller.rb中有:
def show
@festival_artists = FestivalArtist.where(festival_id: @fest.id)
end我试着补充:
def show
@festival_artists = FestivalArtist.where(festival_id: @fest.id)
@artists = Artist.where(id: @festival_artists.artist_id)
end但是,这会抛出一个未定义的方法artist_id来查找# error。
其目标是在艺术节的show.html.erb页面中显示艺术家的名字,这是艺术家所属的节日。
在SQL中,应该是:
SELECT A.artist_name
FROM festival_artists AS FA
INNER JOIN artists AS A
ON FA.artist_id = A.id有什么建议吗?甚至告诉我谷歌会有什么帮助,因为我不确定我的术语是否正确。
如果你还需要更多的信息请告诉我。
发布于 2017-02-19 19:42:11
猜测您的模型结构不是100%正确的。尝试查看basics.html以获得详细信息。
有一些方法可以在Rails中处理您的关联:
在这种情况下,您的代码将如下所示
class Artist < ApplicationRecord
has_many :festival_artists
has_many :fests, through: :festival_artists
end
class Fest < ApplicationRecord
has_many :festival_artists
has_many :artists, through: :festival_artists
end
class FestivalArtist < ApplicationRecord
belongs_to :artists
belongs_to :fests
end所以您可以访问控制器中的艺术家。
def show
@festival_artists = @fest.artists
end发布于 2017-02-19 19:30:03
我不确定你是否需要FestivalArtist模型。如果你在艺术家和节日模型中使用"has_and_belongs_to_many“,这将实现你正在寻找的多到多的关系。
# fest.rb
class Fest < ActiveRecord::Base
has_and_belongs_to_many :artists
end
# artist.rb
class Artist < ActiveRecord::Base
has_and_belongs_to_many :fests
endhttps://stackoverflow.com/questions/42331702
复制相似问题