vkill'blog

“技术本身没有太多价值,掌握了新的思考方式才是真的收获”

ActiveRecord中保护字段的设置和修改

18:43 , vkill
关于设置和修改详细的见这篇文章
http://huacnlee.com/blog/rails-attr-protected-or-attr-accesible-fields

这里主要是写个helper来完成这些,为啥写helper呢?来做个试验


如果我要修改字段 is_valid 和 is_admin ,那么直接修改controller实现起来大概如下

def create
  @user = User.new(params[:user])
  if session[:admin]
    @user.is_valid = params[:user][:is_valid]
    @user.is_valid = params[:user][:is_admin]
  end
  @user.save
  ......
end

def update
  @user = User.find(params[:id])
  if session[:admin]
    @user.is_valid = params[:user][:is_valid]
    @user.is_valid = params[:user][:is_admin]
  end
  @user.update_attributes(params[:user])
  ......
end


那么要改很多地方的话很不方便,所以我们写个helper来实现,写好的helper如下

  def modify_model_protect_attrib(model, params, *attribs)
    if session[:admin]
      attribs.each do |attrib|
        attrib = attrib.to_s
        eval "model.#{attrib} = params[:#{attrib}]"
      end
    end
  end

现在有了helper了,再修改controller看看,现在需要修改的就很少了,修改好的controller如下

def create
  @user = User.new(params[:user])
  modify_model_protect_attrib(@user, params[:user], :is_admin, :is_valid)
  @user.save
  ......
end

def update
  @user = User.find(params[:id])
  modify_model_protect_attrib(@user, params[:user], :is_admin, :is_valid)
  @user.update_attributes(params[:user])
  ......
end

那么,现在是不是很简单了呢?呵呵
类别:ruby & rails | Tags: , , , , | 0 条评论, 990 次阅读
网友评论(0):
发表评论:

Nickname: 
Email:
Site URI: