2014-02-20 103 views
0

我有這樣兩種型號:軌查看的has_many關係

class Article < ActiveRecord::Base 
    belongs_to :articles_type 
end 




class ArticlesType < ActiveRecord::Base 
    has_many :articles 
end 

,並在控制器我寫:

@articles = Article.where(article_type_id: params[:id]) 

,並在視圖(HAML)我嘗試:

= @articles.articles_type.id 

= @articles.articles_types.id 

= @articles.first.articles_type.id 

= @articles.first.articles_types.id 

如何我可以顯示這些articles_type.id但只有第一行嗎?

現在我得到

undefined method `articles_type' 

但爲什麼呢?我做錯了什麼?如何顯示嵌套的模型ID?

回答

0

未定義的方法消息是因爲@articles沒有articles_type方法。爲了使用該方法,您必須獲得單個文章實例。您可以通過致電@articles.first或通過迭代收集來完成此操作。

= @articles.first.articles_type.id 

是你想要使用的行。

1

@articles將是一個項目的集合,而不僅僅是一個項目(因爲您使用了where方法)。你將不得不做的事:

@articles.first.articles_type_id 

(另請注意,你不必做.articles_type.id,因爲@articles.first已經有該類型的ID)

+0

不,如果我想從ArticlesType中獲取一些名爲a_text的字段? –

+0

是的,在這種情況下,你會想要做'@ articles.first.articles_type.a_text'。這完全取決於你想要做什麼。如果你曾經想要訪問一個ID,並且你的模型已經有了ID,那麼最好從該模型中訪問它以達到性能和優化的原因。 – MrDanA

0

看起來你已經得到了你的邏輯倒退。

根據您的模型,文章屬於article_type。

​​

只是看起來像你正確複數化.article_types當它應該是.article_type