大家好我正在使用rails 3.2进行应用程序。我正在尝试使用form_tag
,但我对路线有疑问。
我以我的形式尝试:
= form_tag('/companies/save_category', method: "post") do
和此:
= form_tag({:controller => "companies", :action=>"save_category"}, method: "post") do
在我的config/routes.rb
:
我对这样的路线感到有点困惑
resources :companies do
post 'save_category'
end
或这样的路线:
resources :companies do
member do
post 'save_category'
end
end
但无论哪种方式都行不通。当我执行rake routes
时,我获得了相同的结果
company_save_category POST /companies/:company_id/save_category(.:format) companies#save_category
错误是这个
No route matches [POST] "/companies/save_category"
任何想法?
答案 0 :(得分:3)
考虑以下路线:
resources :companies do
member do
post 'save_category'
end
end
此成员资格块表示save_category
命名空间中的路由/compagnies/
需要公司ID才能生效:
/compagnies/12/save_category # where 12 is params[:company_id]
现在,收集:
resources :companies do
collection do
post 'save_category'
end
end
这意味着要进入save_category路线,您不需要公司ID:
/compagnies/save_category # will work, is not needing a params[:company_id]
在您的情况下,您应该首先使用url帮助程序(在routes.rb之后生成)。你需要在这里:
if save_category is a *member route*
save_category_company_path(@company)
elsif save_category is a *collection route*
save_category_companies_path
我想您要保存的类别与特定公司有关,对吧?如果是,则需要成员路线:
form_tag(save_category_company_path(@company), method: "post") do
希望这有帮助!