ruby-on-rails - Rails NoMethod错误: private method on private method?

标签 ruby-on-rails ruby

我正在尝试使用 Rails 控制台迭代所有 Ad 模型。我希望每个广告执行一个名为 extract_targets 的私有(private)方法:

Ad.all.each do |ad|
  ad.extract_targets
end

尽管当我在循环时收到以下错误时:

NoMethodError: private method `extract_targets' called for #<Ad:0x000000071123b0>

这是一个私有(private)方法,但我从每个广告中调用它,所以我不知道为什么它会引发异常?

  private

  def extract_targets
    normal_name = campaign.name.sub(/^www\./, '')
    links = page.css('a').map { |link| URI(link['href']) }.select {|link|     link.host.sub(/^www\./, '').end_with? normal_name }
    location = links.first.path
    location = '/' if location.empty?
    location.normalize_path!
    update_column :target_id, campaign.targets.find_or_create_by(location: location).id
  end  

最佳答案

您不能使用显式接收者调用私有(private)方法。因此,要么将其公开,要么使用send,或者调用 Ad 上的另一个方法来调用此方法。

关于ruby-on-rails - Rails NoMethod错误: private method on private method?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42227971/

相关文章:

javascript - 如何在单击按钮时使输入字段可见,或在单击按钮时为 ruby​​ on Rails 创建相同的字段

ruby-on-rails - rails/Ajax : Unable to remove "bullet mark" when using Ajax in Rails to add Todos remotely

mysql - 将 mysql2 类型转换为数组并在 ruby​​ 中对其进行排序

ruby-on-rails - Cloud9 - rails |将数据库从 SQLite3 更改为 PostgreSQL

ruby-on-rails - 如何阻止 meta_search 在我的模型上定义搜索?

ruby-on-rails - 从 Controller 参数中保存 Rails 模型?

ruby-on-rails - 执行 rename_table_migration 后重命名 Rails 中的原始迁移文件

ruby-on-rails - 在父级验证中使用子级常量

ruby - 当我运行 "gem install bundler"时出现权限被拒绝错误

ruby-on-rails - 事件管理员 NoMethodError 错误