2011-11-13 73 views
1

我有一個模型,但兩種不同的形式,我通過create行動和另一個通過student_create行動保存一種形式。我想驗證student_create行動形式中的字段,並留下其他形式free.How做呢?任何幫助將不勝感激有條件驗證在一個模型中,但兩種不同的形式

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 

而且這種沒有工作

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

回答

0

我能夠acomplish它是什麼我想給它一個選項:allow_nil=>true

2

在一個不應該被確認你這樣做:

@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驗證。

+0

問題是有需要在'create'雖然驗證等領域 – katie

0

聽起來像是你有兩種類型的書怎麼辦。不確定你的域邏輯是什麼,但是正常的流程我什麼也不做。

class Book < ActiveRecord::Base 

end 

那麼對於路徑你想要一個額外的驗證功能,你可以這樣做:

class SpecialBook < Book 
    validates :town, :presence => true 
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 
相關問題