我正在尝试使用Rails控制台迭代所有Ad
模型。我希望每个广告都执行名为extract_targets
的私有方法:
Ad.all.each do |ad|
ad.extract_targets
end
虽然在循环时遇到以下错误:
NoMethodError: private method `extract_targets' called for #<Ad:0x000000071123b0>
这是一种私有方法,但我是从每个广告中调用它,所以我不知道它为什么会引发异常?
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
答案 0 :(得分:2)
您无法使用显式接收器调用私有方法。因此,要么将其公开,要么使用var path = document.querySelectorAll('svg path');
Velocity(path[0], {
tween: 1000
}, {
duration: 6000,
easing: 'easeOutBounce',
progress: function (el, c, r, s, t) {
el[0].setAttribute('d', ??????);
}
});
,或在send
上调用另一个方法来调用此方法。
答案 1 :(得分:0)
在控制台中,您可以使用send方法检查私有方法。所以Ad
应该有用。
答案 2 :(得分:0)
一种方法是在模型上编写一个类方法。
<强> ad.rb 强>
class Ad < ActiveRecord::Base
...
def self.extract_all_targets
all.each do |ad|
ad.extract_targets
end
end
private
def extract_targets
...
end
end
然后在你的控制台中使用它:
Ad.extract_all_targets