2012-08-14 38 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