Rails - validates_与a:if条件相关联

时间:2009-09-29 15:12:08

标签: ruby-on-rails validation forms conditional

尝试将if条件应用于validates_associated验证时遇到问题。 if条件适用于validates_presence_of,但不适用于validates_associated,并且表单(其中包含两个模型)可正常工作,但验证仍会返回错误,无论if条件是true还是false。

validates_associated :departures, :if => :cruise?
validates_presence_of :ship_name, :if => :cruise?

def cruise?
  item_marker == 1
end

# I even tested it using this, and it still returned a validated_associated error
def cruise?
  false
end

#form item
<%= departure_form.date_select :date, :index => (departure.new_record? ? '' :       
departure.id), :start_year =>Time.now.year, :order => [:month, :day, :year ],   
:prompt=>true %>

我正在使用:离开字段的日期选择,并提示输入默认值(即每个字段的第一个选定选项具有值=“”)。我相信这是导致问题的原因。我可以删除提示,只是在控制器中删除non_cruises的出发日期,但这似乎很草率。有没有人有建议?请注意,此代码使用了Ryan Bates的“处理多种模型在一种形式”食谱中的部分内容。

1 个答案:

答案 0 :(得分:0)

我弄清楚出了什么问题。我的新离场建造者功能是为所有物品创建出发物品,无论是否是游轮。我加了一个if游轮?声明到下面的代码,现在它正常工作。

has_many :departures, :dependent => :destroy

def new_departure_attributes=(departure_attributes)
 departure_attributes.each do |attributes|
   if cruises? #new if statement
     departures.build(attributes)
   end
 end
end
#the following two methods are only used for update actions 
#(the error happens in new/create as well)
def existing_departure_attributes=(departure_attributes)
  departures.reject(&:new_record?).each do |departure|
    attributes = departure_attributes[departure.id.to_s]
    if attributes
      departure.attributes = attributes
    else
      departures.delete(departure)
    end
  end
end

def save_departures
  departures.each do |departure|
    departure.save(false)
  end
end