Ruby on Rails - "Fat Model, Skinny Controller"实践



RubyMine给出了关于"每个控制器操作只调用一个模型方法,而不是初始查找或新方法"的错误,这与"胖模型,瘦控制器"实践有关。但是我不知道怎样才能使这个代码变得更好。

谢谢你抽出时间。

def update
   @admin = Admin.find(params[:id])
   if @admin.update_attributes(permitted_params)
      redirect_to admins_admins_path, notice: "#{@admin.email} updated"
   else
      render action: "edit"
   end
end

find移动到私有方法:

before_action :find_admin, only: [:update]
private
def find_admin
  @admin = Admin.find params[:id]
end

与其有回调,我更喜欢它只作为方法,并将变量@admin设置为它。因此,如果它以前已经设置过,则无需再次访问数据库。

private
def admin
  @admin ||= Admin.find params[:id] if params[:id]
end

在你的方法你可以做:

def update
  if admin.update_attributes(permitted_params)
    redirect_to admins_admins_path, notice: "#{admin.email} updated"
  else
    render action: "edit"
  end
end

这也会给你@admin。

最新更新