如果那里存在参数,则绑定Object中的参数

时间:2011-08-12 20:35:44

标签: ruby-on-rails ruby-on-rails-3

我在服务器上收到带参数的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]) 

事先感谢您的帮助:)。

2 个答案:

答案 0 :(得分:0)

这样的事情可能有用:

user = User.new
params.each do |key,value|
  user[key] = value if user.attribute_names.include?(key.to_s)
end

但请注意,在这种情况下,您应该使用Userattr_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行的结尾。