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

时间:2016-04-22 02:08:12

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-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

所以索引丢失了。

1 个答案:

答案 0 :(得分: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)
<{3>}中的

因此,如果您需要传递options(例如index),则必须立即将其作为第三个参数传递给方法,如下所示:应该工作:

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