0

私は次のモデルを持っています:

class Coupon < ActiveRecord::Base
  belongs_to :company

  validates :description, presence: true, length: { maximum: 50 }, uniqueness: { case_sensitive: false }
  validates :fine_print, presence: true
end

そして、クーポン コントローラの次のメソッド:

def redeem
  if params[:pin] == @coupon.company.pin
    redirect_to root_path
  else
    flash.now[:notice] = "Incorrect Pin"
    render :show
  end
end

このフォームはビューにあります:

<%= form_for( @coupon, :url => coupons_redeem_path( @coupon ), :html => { :method => :post } ) do |f| %>
  <%= label_tag("pin", "Search for:") %>
  <%= text_field_tag("pin") %>
  <%= f.submit "Close Message" %>
<% end %>

送信を押したときにフォームがクーポンコントローラーのrecomeメソッドを呼び出すようにしたいのですが、このエラーが発生しています:

[POST] "/coupons/redeem.1" に一致するルートはありません

編集

これらは私のルートです:

resources :companies do 
  resources :coupons
end
get 'coupons/redeem'
4

1 に答える 1

0

ルートにcouponsは、 のネストされたリソースがありcompaniesます。したがって、次のいずれかの選択肢を選択する必要があります。

1位:

resources :companies do 
  resources :coupons do
    post :redeem, on: :member
  end
end

これは、次のようなヘルパーにつながります: redeem_company_coupon_path(company, coupon)(そして、POST 経由でそこに smth を送信します)。

会社をパスに含めたくない場合は、2番目を選択できます。

resources :companies do 
  resources :coupons
end   
post 'coupons/:id/redeem', to: 'coupons#redeem', as: :redeem_coupon

その後、redeem_coupon_path(coupon)ヘルパーを使用できます

于 2013-09-09T05:44:19.270 に答える