1

ビューの1つでform_tagを使用すると、attr_accessorにいくつか問題が発生します。

<%= form_tag set_location_locations_path, :method => "post" do %>
  <%= collection_select(:location, :location_id, Location.all, :id, :location_name) %>
  <%= submit_tag "Go" %>
<% end %>

そして私のロケーションモデルにはこれがあります:

 attr_accessor :location, :location_id 

また、attr_writerも試してみました。

フォームを送信すると、コンソールに次のように表示されます。

  ActionView::Template::Error (undefined method `location_id' for "1":String):

そして、投稿は次のようになります。

 Parameters: {"utf8"=>"✓", "authenticity_token"=>"oY+jSCV9Mz9iVJnJItADnHdpGhct5DhKpQ+w6JUvgNQ=", "location"=>{"location_id"=>"1"}, "commit"=>"Go"}

なぜこれが機能しないのか理解できませんか?以前は、attr_accessorを問題なく使用していました。足りないものはありますか?

- - 編集 - -

コントローラー(あまりありません)

def set_location
  @location = params[:location][:location_id]      
end

ここでもあまり表示しません:

 = @location
4

1 に答える 1

0

collection_selectは、メソッドlocation_idを持つLocationインスタンスを想定しています。'1'@location変数に割り当てているので、試行錯誤します'1'.location_id。set_locationメソッドを次のように変更します。

def set_location
  @location = Location.new(params[:location])
end
于 2012-08-14T16:19:30.310 に答える