我使用formtastic_cocoon(formastic的jquery版本)获得了一个多级嵌套表单。
我正在尝试从
的意义上做一些验证if value is_numeric do insert into database else do database lookup on text insert id as association end
我希望accepts_nested_attributes_for有一个:if选项,但显然只有:reject_if。
有没有办法像我描述的那样创建一个验证,作为accepts_nested_attributes_for的一部分?
-----------------------根据Zubin的回复更新------------------- --------
我相信Zubin用一种方法走在正确的轨道上,但我似乎无法让它正常工作。我正在使用的方法是
def lookup_prereq=(lookup_prereq) return if lookup_prereq.blank? case lookup_prereq when lookup_prereq.is_a?(Numeric) == true self.task_id = lookup_prereq else self.task = Task.find_by_title(lookup_prereq) end end
当我触发此函数时,self.task_id将被放入数据库中,而不是Task.id.
我想知道我是否遗漏了别的东西。 我不完全确定该方法实际上是被调用的。我不应该说
lookup_prereq(attr[:prereq_id)
在某个时候?
-------------------进一步编辑----------------------- 我想我可以发现只有在命名方法与数据库的名称相同的情况下才调用该方法,因此我将方法更改为
def completed_task=(completed_task)
不幸的是,这仍然是数据库中的值0。
答案 0 :(得分:1)
听起来你需要在嵌套模型中使用一个方法来处理它,例如:
class Post < ActiveRecord::Base
has_many :comments
accepts_nested_attributes_for :comments
end
class Comment < ActiveRecord::Base
belongs_to :post
belongs_to :author
def lookup_author=(lookup_author)
return if lookup_author.blank?
case lookup_author
when /^\d+$/
self.author_id = lookup_author
else
self.author = Author.find_by_name(lookup_author)
end
end
end