2

在我的 Rails 应用程序中,我有两个用户逻辑:

user, and admin

例如我的 line_item 路由是这样的:

namespace :admin do
  resources :line_items, :only => [:edit, :update, :destroy]
end
resources :line_items, :only => [:new, :create, :update, :edit, :destroy]

但在管理部分,我必须对我的 line_item 模型进行验证:

  validates :notes, :presence => {:message =>  I18n.t(:notes_not_chosen)}
  validates :quantity, :presence => {:message =>  I18n.t(:quantity_not_chosen)}
  validates :price, :presence => {:message =>  I18n.t(:price_not_chosen)}
  validates :description, :presence => {:message =>  I18n.t(:description_not_chosen)}

但仅在管理控制器中!如何做到这一点我只在管理 line_item 控制器中有验证,但在用户部分没有?

4

1 回答 1

3

我认为您不能根据您的请求通过哪个控制器进行验证。您可以做的是user为您的模型添加一个属性并将其设置在控制器中。然后,您可以根据用户属性进行验证。像这样:

控制器:

def create
  @line_item = LineItem.new(params[:line_item])
  @line_item.user = current_user
  if @line_item.save 
  # ... standard rails stuff
end

模型:

class LineItem < ActiveRecord::Base
  attr_accessor :user

  validates :notes, :presence => true, :if => Proc.new { user.admin? }
end
于 2013-02-21T17:36:48.810 回答