动态生成对象,ruby,rails的属性

时间:2010-10-18 17:52:09

标签: ruby-on-rails ruby

考虑到这些参数:

ex:1

{:field => 'admin', :id => "1"}

ex:2

{:field => 'client', :id => "1"}

ex:3

{:field => 'partner', :id => "1"}

是否可以(以及当然如何)将其动态应用于User模型,例如:

控制器

#note the field attribute is not a field
#the field attribute I'm trying to set above to what are given in the params hash

def update_user
    field = params[:field]
    @user = User.find(params[:id])
    @user.field = !@user.field
    @user.save(false)
    render :nothing => true
end

FYI

为什么不直接使用params发送并使用update_attributes(params[:user])更新?因为用户属性受到保护,所以更容易以这种方式更新布尔值。

1 个答案:

答案 0 :(得分:1)

我会做这样的事情:

@user = User.where("#{params[:field]} = ?", params[:id]).first if ["admin", "client", "partner"].include?(params[:field])

(“include?”是一项安全检查,以防止用户选择您不希望他们使用的其他字段)