method_missing не работает при использовании полиморфной ассоциации? - PullRequest
1 голос
/ 13 декабря 2011
class Post < ActiveRecord::Base
  post.has_many :comments, :as => :commentable

  def method_missing(name, *args, &block)
    puts "blah!"
  end
end

class Comment < ActiveRecord::Base

  belongs_to :commentable, :polymorphic => true

end

затем в консоли:

>comment.commentable
=> #<Post id: 1022, title: "something">

>comment.commentable.class
=> Post(id: integer, title: string)

>comment.commentable.blah
NoMethodError: undefined method `blah' for "#<Post:0x10f1e9e10>":Post
from /Users/patrick/.rvm/gems/ree-1.8.7-2011.03@myapp/gems/activerecord-3.0.7/lib/active_record/associations/association_proxy.rb:216:in `method_missing'

>Post.find(comment.commentable).blah
=> "blah"

Почему это не работает?

1 Ответ

0 голосов
/ 13 декабря 2011

Я думаю, вам нужно определить respond_to? в вашем классе:

class Post < AR::Base

  def method_missing(name, *args, &block)
    return puts "blah" if name.to_s == 'blah'
    super
  end

  def respond_to?(method_name, include_private = false)
    super || method_name.to_s == 'blah'
  end
end

Затем прокси-сервер ассоциации должен действовать так, как вы ожидаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...