在我的观点中使用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
答案 0 :(得分:0)
您的collection_select正在使用方法location_id的Location实例。您将'1'
分配给@location变量,以便它尝试'1'.location_id
并投诉。将set_location方法更改为:
def set_location
@location = Location.new(params[:location])
end