0

我有一个使用 formtastic_cocoon(jquery 版本的 formtastic)的多级嵌套表单。

我正在尝试在某种意义上进行一些验证

如果值 is_numeric 做
     插入数据库
否则做
     基于文本的数据库查找
     插入 id 作为关联
结尾

我希望accept_nested_attributes_for 有一个:if 选项,但显然只有:reject_if。

有没有办法像我描述的那样创建一个验证作为accepts_nested_attributes_for的一部分?

------------------------根据祖宾的回复更新了------------------------ -----

我相信 Zubin 的方法是正确的,但我似乎无法让它正常工作。我使用的方法是

    def lookup_prereq=(lookup_prereq)
        如果lookup_prereq.blank 则返回?
            case lookup_prereq
        当lookup_prereq.is_a?(Numeric) == true
            self.task_id = lookup_prereq
        别的
            self.task = Task.find_by_title(lookup_prereq)
        结尾
    结尾

当我触发此功能时,self.task_id 将作为“0”而不是 Task.id 放入数据库中。

我想知道我是否还缺少其他东西。我不完全确定该方法实际上正在被调用。难道我不需要说

lookup_prereq(attr[:prereq_id)

在某一点?

-------------------进一步编辑 ----------------------- 我认为我能做到发现只有当它与数据库的值同名时才会调用该方法,因此我将方法更改为

def 完成任务=(完成任务)

不幸的是,这仍然导致 0 作为数据库中的值。

4

1 回答 1

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
于 2011-02-19T07:40:12.450 回答