2016-08-29 1 views
0

Ich arbeite an einem bezahlten Anzeige Job Board hinzuzufügen, und bin mit # Payola-Zahlungen (Umsetzung von Stripe Payment Processor mit Rails-Anwendung) jeden Job laden Post auf der App ..Wie Preis beim Einchecken eine check_box in Ruby on Rails

Dies ist, was ich tun mag:

Wenn ein check_box aktiviert ist, möchte ich den Preis der Anwendung wird deduct von Standardsatz Preis in meinem Jobs zu ändern Tisch, zum Zugabe der check_box wert.

Pictorial Erklärung dessen, was ich tun mag:

Auf das Kontrollkästchen, die es annimmt in Jobs Tabelle $ 20 zu meinem Standardpreis hinzuzufügen.

My Job Post Form

schema.rb

Hinweis: Ein Preis Standard von $ 200 in Cent (d 20000) ist in meinem Job Tisch. Der Grund dafür ist, was in der Payola-Zahlungsdokumentation verlangt wird. Wenn also jemand eine Stellenanzeige veröffentlicht, werden von Stripe 200 € von seiner Kreditkarte abgebucht.

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 

Was habe ich dieses Problem zu lösen getan:

ich eine Methode in meinem Modell definiert (job.rb) genannt price_modification und before_save sie aufgefordert hatte, so dass mein Modell wie folgt aussieht Code unten aber hat nicht:

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 

Vielen Dank im Voraus.

Am Ruby 2.2.4 und Rails 4.2.5.1

+0

Bitte erläutern „aber es hat nicht funktioniert“ und einige Stack-Trace bei Bedarf hinzufügen. – siegy22

+0

@RaVeN Ich meinte, es zieht nicht $ 220 ab. Der Standardpreis, der $ 200 beträgt, wurde abgezogen. Die Idee ist nur den Preis zu ändern, den Stripe abzieht, wenn die check_box beim Ausfüllen des Formulars für die Stellenanzeige überprüft wird. –

Antwort

1

price_modification verwendet, ist eine Zugriffsmethode, die keine Änderungen vornimmt.

Die before_save :price_modification ruft die price_modification Methode auf, die nur den price Wert zurückgibt, aber keine Änderungen vornimmt.

Ich bin nicht sicher, was Sie suchen, aber meine beste Vermutung ist, so etwas wie dieses:

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 
+0

Wow, es hat wie Charme funktioniert !!!!!! Vielen vielen Dank. –

+0

Dies ist nicht das erste Mal, dass ich sehe, dass Sie eine gute Antwort auf Probleme geben. Bitte hilf mir. Wie werde ich in Ruby on Rails immer besser? Ich werde diese Hilfe wirklich brauchen. –

+0

Große Frage, viele Antworten. Übe, schreibe Code, stelle Fragen, erforsche, lese, forsche, arbeite mit Entwicklern zusammen, die dich betreuen. Zeit - viel Zeit für diese Dinge. –