2016-04-22 39 views
0

工作,所以我有這個僱員再培訓局:軌,同一段代碼將不會與3.2

<%= fields_for camera, :index =>camera.id do |field|%> 
<%= field.check_box :alertflag %> 

而這個控制器上:

@camera = Camera.update(params[:camera].keys, params[:camera].values) 

和它的作品在一臺服務器上有Rails 3.0.9,但由於某些原因,它不能在一臺具有Rails 3.2的服務器上以相同的方式工作。

params哈希表是這樣的3.0.9:

camera%5B10%5D%5Balertflag%5D=0 

在3.2:

camera%5Balertflag%5D=0 

所以索引丟失。

+0

以何種方式它不再起作用了嗎?提交的params哈希是什麼樣的? –

+0

@FrederickCheung我在問題中添加了信息。所以基本上索引不見了。 – IBG

回答

2

兩個Rails版本都支持index選項。但對比兩個版本的Rails的FormHelper模塊的源代碼,當它變得清晰,fields_for方法簽名已經從:

def fields_for(record_or_name_or_array, *args, &block) 

Rails 3.0,以

def fields_for(record_name, record_object = nil, fields_options = {}, &block) 

Rails 3.2

所以,如果你需要通過options(例如index),你必須現在第三個參數把它作爲的方法,所以像下面應該工作:

<%= fields_for :camera, camera, :index => camera.id do |field| %>