0

Ich versuche Paypal Integration mit Schienen zu erreichen. Danach (http://railscasts.com/episodes/141-paypal-basics) habe ich eine Funktion im Modell, die Paypal-Service mit einer Rückkehr-URL aufrufen. Ich habe einen Link in der Ansicht hinzugefügt, der mit der Methode in model.But einige verbindet, wie Schienen Funktion im Modell nicht erhalten kann.Ruby on Rails: Calling Model Methode in Sicht

Was mache ich falsch?

Meine Ansicht:

form_for @order do |f| 
- if @order.errors.any? 
    #error_explanation 
     h2 = "#{pluralize(@order.errors.count, "error")} prohibited this order from being saved:" 
     ul 
      - @order.errors.full_messages.each do |message| 
       li = message 
.field 
    = f.label :first_name 
    = f.text_field :first_name 
.field 
    = f.label :last_name 
    = f.text_field :last_name 
.field 
    = f.label :card_number 
    = f.text_field :card_number 
.field 
    = f.label :card_verification, "Card Verification Value (CVV)" 
    = f.text_field :card_verification 
.field 
    = f.label :card_expires_on 
    = f.date_select :card_expires_on, {start_year: Date.today.year, end_year: (Date.today.year+10), add_month_numbers: true, discard_day: true}, {class: "browser-default"} 
.field 
    = link_to 'PayPal', @order.paypal_url(current_user)<= link to model function 
.actions 
    = f.submit 

My Model: definiert folgende Funktion.

def paypal_url(return_url) 
values = { 
    :business => '[email protected]', 
    :cmd => '_cart', 
    :upload => 1, 
    :return => return_url, 
    :invoice => id 
} 

values.merge!({ 
    "amount_#{1}" => item.unit_price, 
    "item_name_#{1}" => item.product.name, 
    "item_number_#{1}" => item.id, 
    "quantity_#{1}" => item.quantity 
}) 

"https://www.sandbox.paypal.com/cgi-bin/webscr?" + values.to_query 

Ende

Fehler:

NoMethodError in Orders#new 
Showing C:/Users/Suniljadhav/SourceCode/TrainStation/app/views/orders/_form.html.slim where line #24 raised: 

private method `paypal_url' called for #<Order:0x5e49bf8> 
Trace of template inclusion: app/views/orders/new.html.slim 

Rails.root: C:/Users/Suniljadhav/Source code/Trainstation

+1

Welchen Fehler bekommen Sie? – mlovic

+0

@mlovic: Bearbeitete meine Frage für den Fehler. –

Antwort

0

Es scheint, dass paypal_url eine private Methode ist und Sie versuchen, es von außerhalb seiner Klasse zu nennen. In Ihrer Order Klasse haben Sie wahrscheinlich das Schlüsselwort private. Jede Methode unterhalb dieses Schlüsselworts wird als privat deklariert (im Gegensatz zu public), und es wird ein Fehler ausgegeben, wenn Sie versuchen, sie von außerhalb der Klasse aufzurufen. Private Methoden können nur innerhalb der Klasse aufgerufen werden, in der sie definiert sind. Versuchen Sie also, die Definition von paypal_url so zu verschieben, dass sie in Ihrer Klasse vor private erscheint.

Sie können mehr darüber lesen, wie dies funktioniert here, und über die Gründe dafür here.

+0

: Großartig, dass ich dumm spielte, sollte es selbst herausgefunden haben. Irgendwie vielen Dank für die Hilfe –