0

rails版3.2.13とruby版があり1.9.3ます。

私は非常に奇妙で興味深い状況に巻き込まれました。

私のアプリケーションには、カスタムバリデーターを備えたモデル「製品」があります。

product.rb

class Product < ActiveRecord::Base
  attr_accessible :description, :name, :price, :short_description, :user_id
  validates :name, :short_description, presence: true
  validates :price, :numericality => {:greater_than_or_equal_to => 0}
  validate :uniq_name

  belongs_to :user
  belongs_to :original, foreign_key: :copied_from_id, class_name: 'Product'
  has_many :clones, foreign_key: :copied_from_id, class_name: 'Product', dependent: :nullify

  def clone?
    self.original ? true : false
  end

 private

 #Custom validator

 def uniq_name
   return if clone?
   user_product = self.user.products.unlocked.where(:name => self.name).first
   errors[:name] << "has already been taken" if user_product && !user_product.id.eql?(self.id)
 end

end

新しい製品を作成しようとしているときの製品コントローラの作成アクション

def create
  @product = current_user.products.new(params[:product])
  respond_to do |format|
    if @product.save
      format.html { redirect_to @product, notice: 'Product was successfully created.' }
      format.json { render json: @product, status: :created, location: @product }
    else
      @product.errors[:image] = "Invalid file extension" if @product.errors[:image_content_type].present?
      format.html { render action: "new" }
      format.json { render json: @product.errors, status: :unprocessable_entity }
    end
 end
end

この行が実行されたときにカスタムバリデーターが呼び出され@product = current_user.products.new(params[:product])line # 2カスタムバリデーターでエラーが発生しました

undefined method `products' for nil:NilClass

カスタムバリデーターで製品オブジェクトを検査しましたuser_idが、nil です。が自動割り当てされないのはなぜuser_idですか?

あなたの助けに感謝します:)

4

2 に答える 2

0

.new を .build に変更してみてください

@product = current_user.products.build(params[:product])

User モデルに関係があることを確認してください

Class User < ActiveRecord::Base
  has_many :products
于 2013-08-02T13:44:39.300 に答える
0

だから...あなたの質問をバイパスします。名前の一意性を検証していないのはなぜですか?

validates_uniqueness_of :name, :unless => :clone?

于 2013-07-22T01:54:40.710 に答える