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| %>
所以我在 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| %>