Rails,同一段代码不适用于 3.2

Rails, same piece of code won't work with 3.2

所以我在 erb 上有这个:

<%= 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 hash 在 3.0.9 上是这样的:

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

在 3.2 上:

camera%5Balertflag%5D=0

所以索引丢失了。

两个 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| %>