首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在一个控制器中为视图调用两个相互依赖的模型

在一个控制器中为视图调用两个相互依赖的模型
EN

Stack Overflow用户
提问于 2017-02-19 19:18:36
回答 2查看 37关注 0票数 0

我是Rails的新手,所以我会尽我所能来解释这一点。

我有三个模特:艺术家,节日,和festival_artist

艺术家只包含一个ID和一个artist_name

fest只包含一个ID和一个festival_name

festival_artist包含一个ID、一个artist_id和一个festival_id

我使用脚手架创建了Fest,所以我的控制器和show.html.erb就在那里。

以下是我的模型:

代码语言:javascript
复制
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中有:

代码语言:javascript
复制
def show
  @festival_artists = FestivalArtist.where(festival_id: @fest.id) 
end

我试着补充:

代码语言:javascript
复制
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中,应该是:

代码语言:javascript
复制
SELECT A.artist_name
FROM festival_artists AS FA
INNER JOIN artists AS A
ON FA.artist_id = A.id

有什么建议吗?甚至告诉我谷歌会有什么帮助,因为我不确定我的术语是否正确。

如果你还需要更多的信息请告诉我。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-02-19 19:42:11

猜测您的模型结构不是100%正确的。尝试查看basics.html以获得详细信息。

有一些方法可以在Rails中处理您的关联:

  1. 如@grizzthedj答复中所注意到的,HABTM (拥有并属于许多)。
  2. has_many :通过联想

在这种情况下,您的代码将如下所示

代码语言:javascript
复制
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

所以您可以访问控制器中的艺术家。

代码语言:javascript
复制
def show
  @festival_artists = @fest.artists
end
票数 2
EN

Stack Overflow用户

发布于 2017-02-19 19:30:03

我不确定你是否需要FestivalArtist模型。如果你在艺术家和节日模型中使用"has_and_belongs_to_many“,这将实现你正在寻找的多到多的关系。

代码语言:javascript
复制
# 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
end
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42331702

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档