2012-08-14 12 views
1

我在一个视图中使用form_tag时遇到了一些attr_accessor问题。Rails 3.2.8 attr_accessor看起来并没有使用form_tag

<%= 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

当您提交表单时,参数会按预期方式发生变化,以便您真正看到错误的位置? – 2012-08-14 14:10:10

+0

表单的要点是设置一些会话参数。出于测试目的,我只是提交给set_location(位置控制器)。我试图看到这些参数:@location = params [:location] [:location_id] – simonmorley 2012-08-14 14:11:49

+0

'set_location'看起来像什么?您在日志中的参数之前或之后是否收到模板错误? – Mischa 2012-08-14 14:52:20

回答

0

你collection_select期待一个位置实例用方法location_id。您将'1'分配给您的@location变量,因此它会尝试'1'.location_id并抱怨。将您的set_location方法更改为如下所示:

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

好的。就是这样。谢谢。是否也可以获取位置ID,以便选择下拉菜单显示正确的位置? – simonmorley 2012-08-14 16:29:06