2011-11-13 14 views
1

私は1つのモデルを持っていますが、2つの異なるフォームがあります.1つは、createアクションで保存し、もう1つはstudent_createアクションで保存します。student_createアクションフォームのフィールドを検証し、私はそれをfree.Howをしますか?すべてのヘルプは1つのモデルで2つの異なるフォームで条件付きの検証

class BookController < ApplicationController 
    def create 
     if @book.save 
    redirect_to @book #eliminated some of the code for simplicity 
     end 
    end 

    def student_create 
    if @book.save   #eliminated some of the code for simplicity 
     redirect_to @book 
    end 
    end 

を理解されるであろう、私はこれを試してみましたが、それは

 class Book < ActiveRecord::Base 
     validates_presence_of :town ,:if=>:student? 

    def student? 
    :action=="student_create" 
    end 
    end 

また、このdidntの仕事

仕事didntは

@object = Model.new(params[:xyz]) 

respond_to do |format| 
    if @object.save(:validate => false) 
      #do stuff here 
    else 
      #do stuff here 
    end 
end 

save(:validate => false)意志skipp検証:あなたがこれを行うに検証すべきではない一

 class Book < ActiveRecord::Base 
     validates_presence_of :town ,:on=>:student_create 
     end 

答えて

0

私は私がそれをあなたが本の2種類を持っているよう:allow_nil=>true

2

+0

問題はしかしcreate' 'で検証する必要がある他のフィールドがあるあります – katie

0

はサウンドオプションを与えることによって、やりたいこと、それをacomplishすることができました。あなたのドメインロジックが何であるかはわかりませんが、通常のフローは何もしません。これはあなたが単一テーブル継承を検討する必要がありますケースがある場合は

class SpecialBook < Book 
    validates :town, :presence => true 
end 

class Book < ActiveRecord::Base 

end 

は、パスのために、あなたがこれを行うことができ、余分な検証をしたいです。


場合によっては、student_idをブックに保存することもできます。

その後

class Book < ActiveRecord::Base 
    validate :validate_town 

    private 
    def validate_town 
     if student_id 
     self.errors.add(:town, "This book is evil, it needs a town.") if town.blank? 
     end 
    end 
end 
関連する問題