2016-04-22 17 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| %>