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)

State オブジェクトの代わりに文字列を Student.create メソッドに送信しているため、妥当と思われます。

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 に答える