0

Location と User の 2 つのモデルがあります。場所has_many :usersとユーザーbelongs_to :location。今、私は次のようなものを使用するフォームを持っています:

 <%= form_for @user do |f| %>
 ...
   <%= f.select(:location,:location_id,Location.all.collect{|location| location.name}) %>
 ...
 <%end%>

調べてみると、正しいフォーム フィールドが生成されているように見えます。

 <select id="user_location_id" name="user[location_id]">
    <option value="Clearfield">Clearfield</option>
    <option value="San Diego">San Diego</option>
  </select>

Ruby on Railsによると: validates_presence_of validates_presence_of に関する質問は、モデル名と私のモデルで機能するはずです:

ユーザー.rb:

  class User < ActiveRecord::Base
       belongs_to :location
       validates_presence_of :location
   ...

Location.rb:

 class Location < ActiveRecord::Base
      has_many :users    
 ...

validates_presence_ofを使用すると場所が表示されなくなりますが、使用するvalidates_presence_of :locationと何らかの理由で機能しますlocation_idか?

4

2 に答える 2

0

間違いに気づいたとき、この質問を書いている途中でしたが、他の誰かに役立つ場合は、ここに置きました.

オプションの値フィールドにある整数ではない生成された HTML に気付くかもしれません。名前です。したがって、問題のあるコードは次のとおりです。

<%= f.select(:location,:location_id,Location.all.collect{|location| location.name}) %>

これは簡単に修正できます。次のように id を追加するだけです。

<%= f.select(:location,:location_id,Location.all.collect{|location| [location.name,location.id]}) %>

値が整数になり、フォームを送信すると、場所の値を入力する必要があるというエラーが表示されることがわかりました。

于 2013-06-14T18:31:29.933 に答える