NoMethodError: undefined method `liquidity_manager?' for #<Order:0x007fd9b7a4cf98>
NoMethodError: undefined method `liquidity_manager?' for #<Order:0x007fd9b7a4cf98>
我的解决方案抛出 NoMethodError。这是我在下面所做的:
Order.rb
class Order < ActiveRecord::Base
belongs_to :member
end
Member.rb
class Order < ActiveRecord::Base
has_many :orders
def liquidity_manager?
@is_liquidity_manager ||= self.class.liquidity_managers.include?(self.email)
end
def liquidity_managers
ENV['LM_ACCOUNTS'].split(',')
end
end
rake 任务逻辑
lib/update_order_tags.rake
中的逻辑
num_counts = (Order.count/10).ceil
num_counts.times do |i|
Order.all.offset(i*10).limit(10).find_each do |g|
if g.tags.blank? # am saving on only the blank fields
if g.liquidity_manager? # The error is here
g.tags = 'LM'
g.save!
else
g.tags = 'Customer'
g.save!
end
end
end
end
如何在 lib 中引用对我有用的 liquidity_manager?
方法?
您在 Member.rb
中定义了 Order#liquidity_manager?
,Rails 不会自动加载它。您必须显式加载文件 Member.rb
,或将该文件重命名为 /app/models/order.rb
.
所以根据@sawa 在回答部分给我的建议,以下是我为使其工作所做的工作。
num_counts = (Order.count/10).ceil
num_counts.times do |i|
Order.all.offset(i*10).limit(10).find_each do |g|
if g.tags.blank?
if g.member.liquidity_manager? # So this easily gets to Member.rb to reference liquidity_manager? method.
g.tags = 'LM'
g.save!
else
g.tags = 'Customer'
g.save!
end
end
end
end
我的解决方案抛出 NoMethodError。这是我在下面所做的:
Order.rb
class Order < ActiveRecord::Base
belongs_to :member
end
Member.rb
class Order < ActiveRecord::Base
has_many :orders
def liquidity_manager?
@is_liquidity_manager ||= self.class.liquidity_managers.include?(self.email)
end
def liquidity_managers
ENV['LM_ACCOUNTS'].split(',')
end
end
rake 任务逻辑
lib/update_order_tags.rake
中的逻辑num_counts = (Order.count/10).ceil
num_counts.times do |i|
Order.all.offset(i*10).limit(10).find_each do |g|
if g.tags.blank? # am saving on only the blank fields
if g.liquidity_manager? # The error is here
g.tags = 'LM'
g.save!
else
g.tags = 'Customer'
g.save!
end
end
end
end
如何在 lib 中引用对我有用的 liquidity_manager?
方法?
您在 Member.rb
中定义了 Order#liquidity_manager?
,Rails 不会自动加载它。您必须显式加载文件 Member.rb
,或将该文件重命名为 /app/models/order.rb
.
所以根据@sawa 在回答部分给我的建议,以下是我为使其工作所做的工作。
num_counts = (Order.count/10).ceil
num_counts.times do |i|
Order.all.offset(i*10).limit(10).find_each do |g|
if g.tags.blank?
if g.member.liquidity_manager? # So this easily gets to Member.rb to reference liquidity_manager? method.
g.tags = 'LM'
g.save!
else
g.tags = 'Customer'
g.save!
end
end
end
end