【发布时间】:2016-02-06 13:58:46
【问题描述】:
我正在尝试创建一个 Active Record 匿名关联扩展,文档解释为 here。我有这个模型
class Program < ActiveRecord::Base
has_many :reports do
def asdf
"Hello extension"
end
end
end
class Report < ActiveRecord::Base
belongs_to :program
end
但是当我在 rails c 控制台上测试这个时,我遇到了 undefined method 错误。
Loading development environment (Rails 4.2.5)
2.1.0 :001 > Program.first.reports.asdf
Program Load (0.3ms) SELECT `programs`.* FROM `programs` ORDER BY `programs`.`id` ASC LIMIT 1
NoMethodError: Report Load (0.3ms) SELECT `reports`.* FROM `reports` WHERE `reports`.`program_id` = 1
undefined method `asdf' for #<Report::ActiveRecord_Associations_CollectionProxy:0x000001035e0098>
from /Users/mariowise/.rvm/gems/ruby-2.1.0/gems/activerecord-4.2.5/lib/active_record/relation/delegation.rb:136:in `method_missing'
from /Users/mariowise/.rvm/gems/ruby-2.1.0/gems/activerecord-4.2.5/lib/active_record/relation/delegation.rb:99:in `method_missing'
from (irb):1
from /Users/mariowise/.rvm/gems/ruby-2.1.0/gems/railties-4.2.5/lib/rails/commands/console.rb:110:in `start'
from /Users/mariowise/.rvm/gems/ruby-2.1.0/gems/railties-4.2.5/lib/rails/commands/console.rb:9:in `start'
from /Users/mariowise/.rvm/gems/ruby-2.1.0/gems/railties-4.2.5/lib/rails/commands/commands_tasks.rb:68:in `console'
from /Users/mariowise/.rvm/gems/ruby-2.1.0/gems/railties-4.2.5/lib/rails/commands/commands_tasks.rb:39:in `run_command!'
from /Users/mariowise/.rvm/gems/ruby-2.1.0/gems/railties-4.2.5/lib/rails/commands.rb:17:in `<top (required)>'
from bin/rails:4:in `require'
from bin/rails:4:in `<main>'
我不想在许多关联之间共享相同的扩展,只是想通过匿名模块(块)来实现这一点。
有什么想法吗?
【问题讨论】:
-
您是否尝试过在您的报告模型中定义 asdf 方法?
-
进行此更改后您是否重新启动了 Rails 控制台?
-
我尝试在报告模型中定义 asdf 方法,但它给了我同样的错误。我也重新启动了 rails 控制台(xD)
-
你能用
count替换"Hello extension"吗?回来报告 :) 停止弹簧,...重新启动控制台.. -
是的,结果相同
undefined method。我开始时正在尝试一些连接。
标签: ruby-on-rails ruby activerecord