2017-02-19 49 views
0

我是Rails的新手,所以我將嘗試並盡我所能解釋這一點。在一個控制器中調用兩個依賴於彼此的模型以查看視圖

我有三個型號:藝人,巨星和festival_artist

藝術家只含有一個ID和這位演出
巨星只含有一個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爲#錯誤。

目標是在該藝術家所屬藝術節的節日的show.html.erb頁面中顯示藝術家的名字。

在SQL這將是:

SELECT A.artist_name 
FROM festival_artists AS FA 
INNER JOIN artists AS A 
ON FA.artist_id = A.id 

有什麼建議?甚至告訴我谷歌會幫助什麼,因爲我不確定我的術語是否正確。

讓我知道你是否需要任何信息。

回答

2

猜你的模型結構不是100%正確的。請嘗試查看http://guides.rubyonrails.org/association_basics.html瞭解詳情。

有2種方式來處理你的Rails協會:

  1. HABTM(有屬於多),因爲注意到@grizzthedj答案。

  2. 的has_many:通過關聯

在這種情況下,你的代碼將看起來像

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 
+0

謝謝!這工作。我不得不改變節日藝術家課堂,以使這些單數,但之後它的工作。我會更詳細地閱讀那篇文章。 – Austin

1

我不確定您是否需要FestivalArtist模型。如果在Artist和Fest模型中使用「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 
end 
+0

訪問藝術家,但如果藝術家模型沒有festival_id,並且該模型沒有artist_id,他們將如何連接? – Austin

+0

對。忘了那個。謝謝! – grizzthedj

相關問題