我在服务器上收到带参数的API调用
first_name , :last_name , :age
等
我想将这些参数绑定到我的对象,用户具有相同名称的属性,就像我想在user[first_name] , user[:last_name]
这样我就可以按照以下方式将完整的用户对象放入数据库,
User.new(params[:user])
或User.new(some_hash)
我不想使用以下内容,
User.new(:first_name=>params[:first_name],:last_name=>params[:last_name])
事先感谢您的帮助:)。
答案 0 :(得分:0)
这样的事情可能有用:
user = User.new
params.each do |key,value|
user[key] = value if user.attribute_names.include?(key.to_s)
end
但请注意,在这种情况下,您应该使用User
或attr_protected
保护attr_accessible
模型的敏感属性。
答案 1 :(得分:0)
将该功能写入User.initialize
可以解决这个问题:
def initialize(args={})
args.each_with_key do |key,val|
instance_variable_set("@#{key}", val)
end
end
这当然没有验证,也不能保护您的对象免受不良数据的影响。例如,如果要确保仅设置有效的可访问属性,请将if respond_to? key
添加到第3行的结尾。