我从Get/Post
requests =>获得了一些变量。
params[:status], params[:value] #:value has the value of the :status
我希望使用活动记录的update
方法来更新记录(需要运行验证)。然后,我如何创建像
@user.update(status: value)
我试过这个。
attribute = { params[:status] => params[:value] }
user.update(attribute)
但这不会调用任何验证。验证对我来说非常重要。
答案 0 :(得分:2)
更新将调用验证,但您需要更改构建属性的方式,因为params[:status]:
不是有效的构造。使用....
attribute = { params[:status] => params[:value] }
答案 1 :(得分:2)
您可以使用send
方法在对象上动态调用方法(属性)
http://ruby-doc.org/core-2.3.2/Object.html#method-i-send
status = params[:status]
user.send("#{status}=", params[:value])
user.save
答案 2 :(得分:1)
有两种方法可以做到这一点
attribute = { status: value }
user.update(attribute) // this should run validation for sure.
user.assign_attributes(attribute)
user.save(validate: true)
答案 3 :(得分:0)
如果用逗号分隔多个字段和值
attributes = {"firstname"=>"John", "surname"=>"Stack"}
在你的情况下
attributes = {params[:status] => params[:value], params[:name] => params[:value]}
如果需要,可以转换为字符串
attributes = {params[:status].to_s => params[:value].to_s, params[:status].to_s => params[:value].to_s} //default is string