2017-02-22 60 views
0

我怎麼能跳過驗證了nested_attribute如果條件爲真Rails的跳過驗證嵌套的屬性,如果條件爲真

aquarium.rb

has_many :fishes 
accepts_nested_attributes_for :fishes, 

fish.rb

belongs_to :aquarium 
validates :ratio, :numericality => { :greater_than => 0 }, if: :skip_this_validation 

然後在aquariums_controller.rb

def some_action 
    @aquarium = Aquarium.new(aqua_params) 
    @aquarium.skip_this_validation = true # i know that this is not valid 
    #must skip validation for ratio and then save to DB 
end 

回答

0

aquarium.rb

has_many :fishes 
accepts_nested_attributes_for :fishes, 
attr_accessor :skip_fishes_ratio_validation 

fish.rb

belongs_to :aquarium 
validates :ratio, :numericality => { :greater_than => 0 }, unless: proc { |f| f.aquarium&.skip_fishes_ratio_validation } 

然後在aquariums_controller.rb

def some_action 
    @aquarium = Aquarium.new(aqua_params) 
    @aquarium.skip_fishes_ratio_validation = true 
    @aquarium.save 
end 
+0

謝謝Max對此。我一直在網上搜尋小時,這是我絕對需要的 – romiesilvano

+0

Hi @romiesilvano!別客氣 !我很樂意幫忙;) – Maxime

0
@aquarium.save(validate: false) 

我相信在模型上跳過驗證。

+0

但我需要一些現場運行驗證,我只是想跳過對特定領域的驗證。 – romiesilvano

+0

在這種情況下,最簡單的方法是使用包含跳過條件的方法進行自定義驗證。我認爲Deepak剛發佈了你需要的東西。 – JayJay

1

你可以只添加條件的方法,並檢查conditional validation

class Fish < ActiveRecord::Base 
    validates :ratio, :numericality => { :greater_than => 0 }, if: :custom_validation 

    private 

    def custom_validation 
    # some_condition_here 
    true 
    end 
end