0

我正在尝试使用 link_to 链接发布到我的注册控制器。

我有<%= link_to "Register for Period", registration_path(period_id: period.id), :method => :post %>

这会生成一个链接,例如:http://localhost:3000/registrations/6?period_id=25其中 6 是 event_id。我需要将 period_id 和 user_id 保存到注册数据库。

我在浏览器中收到以下错误:No route matches [POST] "/registrations/6"

我究竟做错了什么?

路线:

Mavens::Application.routes.draw do

  devise_for :users

  resources :events
  resources :periods
  resources :products
  resources :cart_rows
  resources :product_requests
  resources :inqueries
  resources :registrations
   match '/profile',  to: 'static_pages#profile'

  root :to => 'static_pages#home'

  get "static_pages/home"
  get "static_pages/about"
end
4

2 回答 2

1

如果你把你的routes.rb

resources :registrations do
  member do
    post :save_period
  end
end

在您的链接中:

<%= link_to "Register for period", 
  save_period_registration_path(id: @registration.id, period_id: period.id), :method => :post %>

您将有一条与您的请求相匹配的路线。
当你只有一个resources :registrations规则时routes.rb,只会创建默认的 restful 路由,并且没有POST默认创建的单个资源。
我相信您将不得不阅读有关 CSRF 令牌的一些内容,因为如果您的protect_from_forgery上有一个 ,那么来自单个链接的application_controller这个POST请求可能不起作用。

于 2012-08-17T12:34:54.910 回答
0

您的 routes.rb 缺少所需的路径。这是一条标准路径,因此添加“资源:注册”会起作用。

如果更复杂,请发布您的 routes.rb,我们可以告诉您要添加什么。

于 2012-08-17T12:35:05.813 回答