Как добавить цену при проверке флажка в Ruby on Rails
Я работаю на платной доске объявлений о работе и использую #Payola-Payments (Внедрение Stripe Payment Processor с приложением Rails), чтобы взимать плату за каждую вакансию в приложении.
Это то, что я люблю делать:
Когда флажок check_box отмечен, я хочу, чтобы цена, которую приложение будет удерживать, изменилась с установленной по умолчанию цены в моей таблице заданий на добавление стоимости check_box.
Наглядное объяснение того, что я люблю делать:
Установив флажок, я предполагаю добавить 20 долларов к моей цене по умолчанию в таблице вакансий.
schema.rb
Примечание. По умолчанию в моей таблице вакансий установлено значение цены в 200 долларов в центах (т.е. 20000). Причина в том, что требуется в платежной документации Payola. Таким образом, каждый раз, когда кто-нибудь публикует объявление о работе, Stripe снимает с его кредитной карты 200 долларов.
ActiveRecord::Schema.define(version: 20160827065822) do
create_table "jobs", force: :cascade do |t|
t.string "title", limit: 255
t.string "category", limit: 255
t.string "location", limit: 255
t.text "description"
t.text "to_apply"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.string "name", limit: 255
t.integer "price", default: 20000
t.string "permalink", limit: 255
t.string "stripeEmail", limit: 255
t.string "payola_sale_guid", limit: 255
t.string "email", limit: 255
t.string "website", limit: 255
t.string "company_name", limit: 255
t.boolean "highlighted"
end
end
Что я сделал, чтобы решить это:
Я определил метод внутри моей модели (job.rb), который называется price_modification
и называется before_save
на нем так, что моя модель выглядит следующим образом, но не работает:
class Job < ActiveRecord::Base
include Payola::Sellable
before_save :price_modification
def price_modification
price
end
def price_modification=(new_price)
if :highlighted == t
self.price += (price + 2000)
else
self.price = new_price
end
end
end
Заранее спасибо.
Использую Ruby 2.2.4
а также Rails 4.2.5.1
1 ответ
price_modification
метод доступа, который не вносит изменений
before_save :price_modification
зовет price_modification
метод, который возвращает только price
значение, но не вносит изменений.
Я не уверен, что вы ищете, но я думаю, что-то вроде этого:
class Job < ActiveRecord::Base
...
# Use before_create instead of before_save so
# apply_extra_fees is *not* called multiple times.
before_create :apply_extra_fees
HIGHLIGHT_FEE_IN_CENTS = 2000
def apply_extra_fees
if highlighted?
self.price += HIGHLIGHT_FEE_IN_CENTS
end
end
...
end