2013-07-30 2 views
0

Я не совсем уверен, почему я получаю эту ошибку:Почему я не получаю сообщение «Нет маршрутов»?

Routing Error 
No route matches [POST] "/transactions/new" 

Это мой конфигурационный файл:

TwerkApp::Application.routes.draw do 
    get "transactions/new" 
    resources :transactions 

Это мой контроллер:

class TransactionsController < ApplicationController 
    def new 
    @transaction = Transaction.new(current_user.email, 100.0, params[:transaction]) 
    end 

    def create 
    @transaction = Transaction.new(current_user.email, 100.0, params[:transaction]) 
    if @transaction.charge 
     flash[:success] = 'Thanks for the moolah!' 
     redirect_to root_path 
    else 
     flash[:error] = @transaction.errors.first 
     render :new 
    end 
    end 
end 

Это новая сделка форма:

= form_for :transaction do |f| 
    = label_tag :card_number, "Credit Card Number" 
    = text_field_tag :card_number, nil, name: nil, :value => "4111111111111111", class: "cc-number" 
    %p 
    = label_tag :card_code, "Security Code on Card (CVV)" 
    = text_field_tag :card_code, nil, name: nil, :value => "123", class: "cc-csc" 
    %p 
    = label_tag :card_month, "Card Expiration" 
    = select_month nil, {add_month_numbers: true}, {name: nil, class: "cc-em"} 
    = select_year Date.new(2020), {start_year: Date.today.year, end_year: Date.today.year+15}, {name: nil, class: "cc-ey"} 
    %br 
    = f.submit 

и реки маршрутов:

 transactions GET /transactions(.:format)    transactions#index 
        POST /transactions(.:format)    transactions#create 
    new_transaction GET /transactions/new(.:format)   transactions#new 
    edit_transaction GET /transactions/:id/edit(.:format)  transactions#edit 
     transaction GET /transactions/:id(.:format)   transactions#show 
        PUT /transactions/:id(.:format)   transactions#update 
        DELETE /transactions/:id(.:format)   transactions#destroy 

Кто-нибудь есть какие-нибудь идеи?

ответ

1
  1. Я не понимаю, почему у вас есть в ваших маршрутах, когда resources :transactions уже сгенерированных этот маршрут get "transactions/new".
  2. Нет [POST] "/transactions/new", есть только один GET /transactions/new(.:format).
  3. Вы должны использовать экземпляр вместо символа в form_for:

    = form_for @transaction do |f| 
    

    Он пошлет запрос POST к /transactions.

1

new метод в контроллере должен быть обновлен следующим образом:

class TransactionsController < ApplicationController 
    def new 
    @transaction = Transaction.new 
    end 

Метод TransactionsController#create также должен быть обновлен. Метод Transaction#new передается по трем аргументам, но в качестве аргумента он должен принимать только один хэш. Я не уверен, что поля в базе данных, но что-то, как это должно работать:

@transaction = Transaction.new({ email: current_user.email, money: 100.0 }.merge(params[:transaction])) 

Форма должна быть обновлена, а также:

= form_for :transaction do |f| 
    = f.label :card_number, "Credit Card Number" 
    = f.text_field :card_number 
Смежные вопросы