有关问题的代码版本,请参阅# 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)
的预期行为吗?
答案 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)
会引发语法错误。