2011-09-28 95 views
0

我對RoR非常陌生,在學習中遇到障礙。 我創建了一個針對表演者數據庫表的腳手架,該表具有與流派表相關的外鍵作爲表演者流派的查找表。Rails爲實例變量增加值

我正在試圖做的是使用來自當前表演者行的genre_id在針對流派表的查找中提取流派名稱。我在列表動作中按照需要工作,除了我似乎無法弄清楚如何在@performer實例變量中添加「genre_name」=> @genre [:genre_name],以便它傳播到視圖。

在我的列表動作中,我有以下代碼,但我顯然做錯了,並且非常感謝,如果有人能夠引導我。

def list 
    @performer_pages, @performers = paginate :performers, :per_page => 10 
    @performers.each do |performer| 
     #logger.debug(performer[:genre_id]) 
     @genre = Genre.find(performer[:genre_id], :select => 'genre_name') 

     @performers[performer[:id]][:genre_name] = @genre[:genre_name] 
     ^-- THIS IS THE LINE I AM STUCK ON 
    end 

    logger.debug(@performers.inspect) 
    end 

感謝

回答

1

你應該使用協會,他們會做出這樣很容易。

在您的Performer模型中,您應該有一個belongs_to :genre線。

在你的流派模型中,你應該有一個has_many :performers行。

現在,在你的代碼,你可以用這個訪問名稱的流派:(假設你已經有一個@performer

@performer.genre.genre_name

我希望這有助於讓你在正確的軌道上!

+0

哦......我想我應該提到這一點。在我的表演模特里,我有has_one:流派,在我的流派模特中,我有belongs_to:表演者。我應該將其更改爲has_many嗎? – Skittles

+0

啊......所以我把它弄倒了。不。在我的數據庫中,我有FK約束,而表演者有genre_id字段,genres是genre_name基於該id的查找表。那麼,我需要反轉belongs_to,然後has_one,是嗎? – Skittles

+0

正確。另外Rails有時在數據庫級別不適合FK約束,因爲它在應用程序級別上執行它們的時間和地點有它自己的規則。現在保留它,但要注意它。 – ctcherry