【问题标题】:Rails, same piece of code won't work with 3.2Rails,同一段代码不适用于 3.2
【发布时间】:2016-04-22 02:08:12
【问题描述】:

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

所以索引丢失了。

【问题讨论】:

  • 在什么情况下它不再起作用了?提交的参数哈希是什么样的?
  • @FrederickCheung 我将信息添加到问题中。所以基本上没有索引。

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.2


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-20
    • 2022-10-01
    • 2022-11-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多