开发者

accepts_nested_attributes_for :reject_if to trigger another method

I've got a multi-level nested form using formtastic_cocoon (jquery version of formtastic).

I am trying to do some validation in the sense of

if value is_numeric do
     insert into database
else do
     database lookup on text
     insert id as association
end

I was hoping tha the accepts_nested_attributes_for would have an :if option, but apparently there is only the :reject_if.

Is there a开发者_StackOverflow社区 way to create a validation like I describe as part of the accepts_nested_attributes_for??

-----------------------Updated as per Zubin's Response ---------------------------

I believe Zubin is on the right track with a method, but I can't seem to get it working just right. The method I am using is


    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

When I trigger this function, the self.task_id is being put in the database as '0' rather than the Task.id.

I'm wondering if I'm missing something else. I'm not completely sure that the method is actually being called. Shouldn't I need to say

lookup_prereq(attr[:prereq_id)

at some point?

-------------------further edit ----------------------- I think from what I can find that the method is called only if it is named with the same name as the value for the database, therefore I've changed the method to

def completed_task=(completed_task)

Unfortunately this is still resulting in 0 as the value in the database.


Sounds like you need a method in your nested model to handle that, eg:

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
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜