我有以下型号:
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 %>
我希望表单在点击提交时在优惠券控制器中调用兑换方法,但我收到此错误:
没有路线匹配[POST]“/ coupons/redeem.1”
修改
这些是我的路线:
resources :companies do
resources :coupons
end
get 'coupons/redeem'
答案 0 :(得分:0)
在您的路线中,coupons
是companies
的嵌套资源。所以你应该选择以下其中一种:
第一
resources :companies do
resources :coupons do
post :redeem, on: :member
end
end
这会产生这样的帮助:redeem_company_coupon_path(company, coupon)
(并通过POST发送smth)。
如果您不想将公司纳入您的路径,您可以选择第二个:
resources :companies do
resources :coupons
end
post 'coupons/:id/redeem', to: 'coupons#redeem', as: :redeem_coupon
之后你可以使用redeem_coupon_path(coupon)
帮助