"NoMethodError: неопределенный метод" в модели Ruby on Rails
Я создаю систему, которая повторяет платежи каждый месяц, поэтому я создаю новое требование платежа, используя камень всякий раз, когда
Проблема, кажется, в моем методе Модели оплаты, который здесь.
class Payment < ActiveRecord::Base
belongs_to :client
def monthly_payment
clients = Client.all
clients.each do |client|
Payment.create(month: Date.now, client_id: client.id)
end
end
end
В cron.log я получил NoMethodError, поэтому я попробовал метод в консоли rails, и появляется та же ошибка:
NoMethodError: undefined method `monthly_payment' for Payment (call 'Payment.connection' to establish a connection):Class
Что-то не так с моделью?
Вот схема оплаты:
create_table "payments", force: :cascade do |t|
t.date "date"
t.string "type"
t.date "month"
t.boolean "paid"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.integer "client_id"
end
2 ответа
Решение
Вы должны использовать метод класса, а не метод экземпляра:
def self.monthly_payment # notice the self.
clients = Client.all
clients.each do |client|
Payment.create(month: Date.now, client_id: client.id)
end
end
Таким образом, вы сможете позвонить
Payment.monthly_payment # class method
# method that can be called only on the Payment class
И не
Payment.where(some_condition).first.monthly_payment # instance method
# method that can be called only on an instance of the Payment class
Интересная ссылка об этом: http://www.railstips.org/blog/archives/2009/05/11/class-and-instance-methods-in-ruby/
Попробуйте определить его как метод класса, т.е.
def Payment.monthly_payment
# etc.
end
Извините за плохое форматирование, я на мобильном.