我有一个非常简单的问题,但找不到一个很好的解决方案。我有一个用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在视图/students/new.html.erb视图中,我将状态显示为下拉列表:
<p>
<%= f.label :state %><br />
<%= f.collection_select :state, State.find(:all),
:id, :name, :prompt => "Select a State" %>
</p>到目前为止,一切正常,但是当我点击save时,我得到了一个错误:
State(#37872860) expected, got String(#21001240)这似乎是合理的,因为我向Student.create方法发送了一个字符串,而不是一个State对象。
在RoR中处理此问题的最佳方法是什么?我正在手动获取控制器中的State对象,并在参数散列中替换它,但我认为应该是更好的方法。
非常感谢。费尔南多
发布于 2009-09-08 09:46:24
State.find(:all)应该真正发生在你的控制器中,而不是你的视图中。我甚至不认为在视图中访问模型是可能的,这可能是您的问题。如果你在你的控制器中做了类似的事情:
@states = State.find(:all)
然后在视图中使用@states变量:
“选择一个状态”%>
我希望这能有所帮助。
https://stackoverflow.com/questions/1391648
复制相似问题