2015-06-02 51 views
0

在rails中處理select標記時,我在理解options_from_collection_for_select方法時遇到了麻煩。從我的理解,這個助手可以任意對象和兩個附加參數的集合:方法的名稱來讀取,分別期權價值和文本:options_from_collection_for_select方法的實現

<%= options_from_collection_for_select(Product.all, :id, :name) %> 

這是很好的例子,以幫助瞭解助手和僅當idname字段屬於Product時纔有效。假設,在我的情況下,我想product.category.name顯示爲一個文本,那麼我怎麼能實現這一點。

同樣,productcategory模型具有one-to-one關聯。

爲了實現我的目標,我嘗試了以下方法,但我認爲,這種關聯違反了規則。

<%= options_from_collection_for_select(Product.all, :id, Product.category_name) %> 

因此,有人可以用更好的解決方案建議?

+0

粘貼完整的選擇標記你正在嘗試做 –

回答

0

你需要有getter方法爲category_nameProduct模式:

def category_name 
    self.category.name 
end 

而且在你看來,你可以簡單地調用:category_name

<%= options_from_collection_for_select(Product.all, :id, :category_name) %> 

希望這將有助於

+0

感謝@Madan現在我所知道的問題,而不是定義'category_name'我的方法使用範圍。你可以使用範圍建議相同嗎?謝謝你 – SujitS

0

在這種情況下,您可以使用模型方法。

product.rb

def get_category_name 
    self.category.name 
end 

,你可以把它在options_from_collection_for_select作爲

<%= options_from_collection_for_select(Product.all, :id, :get_category_name) %> 

首先,它會檢查在產品表中是否存在任何列,然後它會檢查爲方法。

0

您可以使用產品模式中的category_name製作實例方法。

def category_name 
    self.category.name 
end 

然後,在視圖中使用此助手。

<%= options_from_collection_for_select(Product.all, :id, :category_name) %> 
0

在產品型號:

def category_name 
    self.category.name 
end 

,並考慮:

<%= options_from_collection_for_select(Product.all, 'id', 'category_name') %>