2009-09-08 90 views
0

我有一個非常簡單的問題,但無法找到一個很好的解決方案。我有紅寶石查找代碼(例如,生活在一個國家的學生):RoR查找示例

# State lookup (id, name) 
class State < ActiveRecord::Base 
    has_many :students 
end 

# Class that belogs to a state 
class Student< ActiveRecord::Base 
    belongs_to :state 
end 

,並在視圖/學生/ new.html.erb的看法,我顯示狀態爲下拉:

<p> 
    <%= f.label :state %><br /> 
    <%= f.collection_select :state, State.find(:all), 
     :id, :name, :prompt => "Select a State" %> 
    </p> 

到目前爲止,一切都很好,但是當我打救我得到了一個錯誤:

State(#37872860) expected, got String(#21001240) 

什麼似乎是合理的,因爲我發送一個字符串,而不是一個國家對象的Student.create方法。

哪個是在RoR中處理這個問題的最好方法?我手動獲取控制器中的狀態對象並將其替換爲參數哈希值,但我認爲應該是更好的方法。

非常感謝。 費爾南多

回答

0
<%= f.collection_select :state_id, State.find(:all), :id, :name, :prompt => "Select a State" %> 

:state_id:state

+0

謝謝JDL,但嘗試過,現在我得到:在呈現舞臺上的#<狀態:xxxxxxxx>的undefined方法'state_id'。 – Fernando 2009-09-08 02:48:00

+0

你可以從視圖中發佈form_tag行嗎? – jdl 2009-09-08 03:05:08

+0

jdl,非常感謝。問題在於,在我的學生表中,狀態欄被命名爲'州',而不是'state_id'。這造成:如果在視圖中引用了state_id,則會下降。感謝您的提示在表格中找到了問題,重新創建它,現在它按照您的說法工作(f.collection_select:state_id,...與之相同)。 關心;費爾南多 – Fernando 2009-09-08 12:49:23

0

State.find(:所有)確實應該發生的事情在你的控制器不是你的看法。我甚至不認爲它有可能在視圖中訪問模型,這可能是您的問題。如果你在你的控制器做這樣的事情:

@states = State.find(:所有)

然後使用@states變量視圖:

「選擇國家」 %>

我希望有幫助。