Ruby on rails 覆盖Rails强参数中的一个属性
有没有一种方法可以覆盖一个属性,但仍然在Rails中使用强参数?例如,在下面的示例中,如果我希望每次都覆盖此人的姓名,但也要使用Ruby on rails 覆盖Rails强参数中的一个属性,ruby-on-rails,ruby,controller,Ruby On Rails,Ruby,Controller,有没有一种方法可以覆盖一个属性,但仍然在Rails中使用强参数?例如,在下面的示例中,如果我希望每次都覆盖此人的姓名,但也要使用person\u params方法。一定有比手动设置@person.name更好的方法,对吗 class PeopleController < ActionController::Base def create @person = Person.new(person_params) @person.name = "ABC" @pers
person\u params
方法。一定有比手动设置@person.name
更好的方法,对吗
class PeopleController < ActionController::Base
def create
@person = Person.new(person_params)
@person.name = "ABC"
@person.save
end
private
def person_params
params.require(:person).permit(:name, :age)
end
end
class PeopleController
如果您只想将名称改写为其他字符串,或在保存前格式化名称,则只需执行以下操作:
@person = Person.new(person_params.merge!(name: 'ABC'))
如果要在一行中创建和合并,只需执行以下操作:
def create
@person = Person.create(person_params.merge!(name: 'ABC'))
end
你也可以做类似的事情: 看起来你会形成你想要的参数的散列。从链接:
params = ActionController::Parameters.new({
person: {
name: 'Francesco',
age: 22,
role: 'admin'
}
})
permitted = params.require(:person).permit(:name, :age)
permitted # => {"name"=>"Francesco", "age"=>22}
permitted.class # => ActionController::Parameters
permitted.permitted? # => true
Person.first.update!(permitted)
# => #<Person id: 1, name: "Francesco", age: 22, role: "user">
params=ActionController::Parameters.new({
人:{
姓名:“弗朗西斯科”,
年龄:22,,
角色:'管理员'
}
})
允许=参数要求(:个人)。允许(:姓名,:年龄)
允许的#=>{“姓名”=>“弗朗西斯科”,“年龄”=>22}
允许的.class#=>ActionController::参数
允许。允许?#=>真的
Person.first.update!(准许)
# => #
你为什么要用Ruby以外的另一种语言编写代码。佛罗里达州没有很多Ruby/Rails的演出!