2016-07-27 5 views
0

私たちはレールモデルキャンペーンを持っており、has_manyロケーションとcamapignも多くのグループを持ち、グループには多くのタグがあります 私たちはすべての検証がサーバー側で必要です。マルチタブでフォームを分割する場合、レールフォームを検証する方法は?

私のモデルは以下のとおりです。

class Camapign < ActiveRecord::Base 
    has_many :locations 
    has_many :groups 
    attr_writer :current_tab 
    validates :name, :presence => true 
    validates :event_date, :presence => true 
end 

class Location < ActiveRecord::Base 
    validates :name, :presence => true 
end 

class Group < ActiveRecord::Base 
    has_many :tags 
    validates :name, :presence => true 
    validates :industry, :presence => true 
end 

class Tag < ActiveRecord::Base 
    validates :name, :presence => true 
end 

私は検証偽でCamapignを作成していたし、私の見解は異なるタブ/ポートレットであるCamapignを作成しています。

フォームに表示されているフィールドだけを検証する必要があり、有効でない場合は、尊重されたタブに適切なエラーに移動する必要があります。最初のタブ上の

私は2番目のタブにキャンペーン名と場所 を持っている私は、グループ名とタブ

を持っている私は準拠タブの尊敬進展とし、最後にデータベースにすべてのタブの詳細を保存し、すべての詳細を公開したいです私はモーダルで持っている中間のタブで詳細を確認するのが好きです。

私はCamapignモデルですべての操作をリレーショナルインサートで行い、current_tab属性でトラッキングしています。

Camapignモーダルフィールドをcurrent_tab値で検証することはできましたが、他のリレーショナルモーダルでは検証できませんでした。

邪悪なような追加の宝石は好きではありません。標準的なコードと同じように簡単に作ることができます。従属性が低くなります。

タブでエラーを表示するには、タブとホーに基づいてフォームの検証をお手伝いください。

答えて

0

我々の前にして、検証イベント

class Camapign < ActiveRecord::Base 
    has_many :locations 
    has_many :groups 
    attr_writer :current_tab 
    validates :name, :presence => true 
    validates :event_date, :presence => true 

attr_writer :current_step # for access current tabs 

     with_options :if => Proc.new { |campaign| campaign.current_step == "location"} do |step| 
      step.after_validation :validate_location_name 
      end 

    def validate_location_name 
     self.locations.each do |location| 
      if !location.name.present? 
      location.errors.add(:name,"Invalid location") 
      errors.add(:name,"Invalid location") 
      end 
     end 
     end 
end 
に保存することができます
関連する問題