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

誰にもアイデアはありますか?

4

2 に答える 2

1
  1. このルートが既に生成されているのにget "transactions/new"、ルートにがある理由がわかりません。resources :transactions
  2. ありません[POST] "/transactions/new"、一つだけありGET /transactions/new(.:format)ます。
  3. form_for では、シンボルの代わりにインスタンスを使用する必要があります。

    = form_for @transaction do |f|
    

    に POST リクエストを送信し/transactionsます。

于 2013-07-30T01:26:16.073 に答える
1

コントローラーのnewメソッドは次のように更新する必要があります。

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

TransactionsController#createメソッドも更新する必要があります。メソッドには 3 つのTransaction#new引数が渡されますが、引数として 1 つのハッシュのみを受け取る必要があります。データベースのフィールドが何であるかはわかりませんが、次のようなものが機能するはずです。

@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
于 2013-07-30T01:30:04.957 に答える