我有一个非常简单的问题,但找不到一个好的解决方案。我在ruby中有一个查找代码(例如,居住在州的学生):
# 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
在view / students / 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方法发送字符串而不是State对象。
在RoR中处理此问题的最佳方法是哪种?我手动在控制器中获取State对象并将其替换为参数hash,但我认为应该是更好的方法。
非常感谢。 费尔南多
答案 0 :(得分:0)
<%= f.collection_select :state_id, State.find(:all), :id, :name, :prompt => "Select a State" %>
:state_id
不是:state
答案 1 :(得分:0)
State.find(:all)应该是你控制器中发生的事情,而不是你的观点。我甚至认为它不可能在视图中访问模型,这可能是你的问题。如果你在控制器中做了类似的事情:
@states = State.find(:all)
然后在视图中使用@states变量:
“选择州”%&gt;我希望有所帮助。