Rails 4:强大的参数和标量数组必须在许可证上列出?

时间:2015-07-22 16:50:28

标签: arrays ruby-on-rails-4 strong-parameters

有关问题的代码版本,请参阅# person.rb class Person < ActiveRecord::Base # Attributes: # - names (string) # - age (integer) # Combine: ["a", "b", "c", ...] => "a,b,c" def names=(values) self[:names] = values.join(",") if values.present? end end # people_controller.rb class PeopleController < ApplicationController def create @record = Record.new(person_params) @record.save! end def person_params params.require(:person).permit( # Works fine :age, names: [] # Works fine { names: [] }, :age # Does not work (SyntaxError) names: [], :age ) end end 方法:

names

问题是,为什么strong_parameters标量数组在开头列出时不起作用而不将其作为哈希包装?

http://edgeguides.rubyonrails.org/action_controller_overview.html#strong-parameters doc示例不会使用散列包装标量数组,但它们也不是非常复杂的示例。

这是binCounts.append(0) 的预期行为吗?

1 个答案:

答案 0 :(得分:2)

这不是strong_params的事情,而是ruby如何读取属性列表。在Ruby中,当方法的最后一个参数时,你只能省略哈希周围的花括号,所以这个调用:

any_method(arg1, arg2, key: value, foo: :bar)

读作:

any_method(arg1, arg2, { key: value, foo: :bar })

如果哈希不是最后一个参数,则不能省略括号,因此:

any_method(arg1, key: value, arg2)

会引发语法错误。