2016-07-27 58 views
0

我们有导轨模型活动,它有has_many位置和camapign也有许多组和团体有很多标签 我们喜欢所有验证必须与服务器端。如何验证rails窗体如果将多窗体中的窗体拆分?

我的车型有:

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和我的看法是不同的标签/门户。

我需要验证只有我已经在窗体上显示的字段,如果它无效,那么它应该导航到适当的错误尊重选项卡。

第一个选项卡,我有系列的名称和第二个选项卡上的位置 我有团体名称和标签上

我要保存所有标签细节与尊重的进步数据库选项卡,并在年底符合并公布所有细节但我想验证细节吃中间选项卡,我有模态。

我有关于Camapign模型的所有操作与关系插入,我跟踪current_tab属性。

我能够使用current_tab值验证Camapign模态字段,但无法验证其他关系模态。

我们不喜欢使用像邪恶的任何额外的宝石,我喜欢做像标准代码一样简单,所以我们有较少的依赖性。

请帮助我们验证基于选项卡和锄头的表单,以在选项卡上显示错误。

回答

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