Как добавить цену при проверке флажка в 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
Другие вопросы по тегам