2

私のレールアプリには、2つのユーザーロジックがあります:

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 に答える