3

私はProjectモデルとモデルを持っていUserます。プロジェクトにはクライアント (ユーザー クラス) が必要なので、Projectモデルにはclient_id外部キーがあります。

Userモデルには属性typeがあり3、ユーザーがクライアントである場合に含まれます。

プロジェクトがクライアントに割り当てられたとき、@user.typeつまり3.

Project.rb

validates :client_id, presence: true, #@user.type must be 3
belongs_to :client, :class_name => User, :foreign_key => :client_id

ユーザー.rb

#constants
TYPES = {
    :manager => 1,
    :contractor => 2,
    :client => 3
}

検証の方法がわかりません。検証に関する Rails ガイドを読みましたが、まだ解決策が得られないようです。何か案は?

4

2 に答える 2

5

inclusion検証ヘルパーを使用します。ドキュメントはこちら

ドキュメントの簡単な例を次に示します

class Coffee < ActiveRecord::Base
  validates :size, :inclusion => { :in => %w(small medium large),
    :message => "%{value} is not a valid size" }
end


編集:

わかりました、あなたの言いたいことはわかります。これには検証ヘルパーを使用しないでください。手動で行ってください。

# somewhere in your model (don't be tempted to put this in your controller)
def assigning_client
  if @user.type == 3
    # do the assignment
  else
    errors.add(:base, :message => "User must be a client")
  end
end

save!エラーは、検証を強制する bang バージョンを使用している限り、情報が保存されないようにします。

于 2012-07-11T01:35:45.203 に答える
1

ここでただのポインタ。activerecord モデルで type という名前の属性を使用しないでください。RailsがSTI(Single Table Inheritance)を使用する方法と競合します。これは、type属性を使用して、別のクラスをサブクラス化するときにクラスのタイプを決定するためです。

于 2012-07-11T01:57:46.580 に答える