0

formtastic_cocoon(formtasticのjqueryバージョン)を使用したマルチレベルのネストされたフォームがあります。

私はある意味でいくつかの検証を行おうとしています

値がis_numericの場合
     データベースに挿入
そうでなければします
     テキストのデータベースルックアップ
     IDを関連付けとして挿入
終わり

私はaccepts_nested_attributes_forに:ifオプションがあることを望んでいましたが、どうやら:reject_ifしかありません。

accepts_nested_attributes_forの一部として説明するような検証を作成する方法はありますか?

-----------------------Zubinの応答に従って更新---------------------- -----

Zubinは方法で正しい方向に進んでいると思いますが、正しく機能させることができないようです。私が使用している方法は

    def lookup_prereq =(lookup_prereq)
        lookup_prereq.blank?
            ケースlookup_prereq
        lookup_prereq.is_a?(数値)==trueの場合
            self.task_id = lookup_prereq
        そうしないと
            self.task = Task.find_by_title(lookup_prereq)
        終わり
    終わり

この関数をトリガーすると、self.task_idはTask.idではなく「0」としてデータベースに配置されます。

私は何か他のものが欠けているのだろうかと思っています。メソッドが実際に呼び出されているかどうかは完全にはわかりません。私は言う必要はありません

lookup_prereq(attr [:prereq_id)

ある時点で?

-------------------さらなる編集-----------------------私は私ができることから考えるデータベースの値と同じ名前で名前が付けられている場合にのみメソッドが呼び出されることがわかったため、メソッドを次のように変更しました

defcompleted_task =(completed_task)

残念ながら、これでもデータベースの値は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 に答える