0

我有一个非常简单的问题,但找不到一个好的解决方案。我在 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 对象并在参数哈希中替换它,但我认为应该是更好的方法。

非常感谢。费尔南多

4

2 回答 2

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

:state_id不是:state

于 2009-09-08T02:35:36.003 回答
0

State.find(:all) 确实应该是在您的控制器而不是您的视图中发生的事情。我什至认为不可能访问视图中的模型,这可能是您的问题。如果您在控制器中执行以下操作:

@states = State.find(:all)

然后在视图中使用@states 变量:

“选择一个州”%>

我希望这会有所帮助。

于 2009-09-08T09:46:24.157 回答