Rails 3.2.8 attr_accessor似乎没有使用form_tag

时间:2012-08-14 14:03:10

标签: ruby-on-rails ruby

在我的观点中使用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

1 个答案:

答案 0 :(得分:0)

您的collection_select正在使用方法location_id的Location实例。您将'1'分配给@location变量,以便它尝试'1'.location_id并投诉。将set_location方法更改为:

def set_location
  @location = Location.new(params[:location])
end