尝试将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的“处理多种模型在一种形式”食谱中的部分内容。
答案 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