4

大家好,我正在使用 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"

任何的想法?

4

1 回答 1

3

考虑以下路线:

resources :companies do
  member do
    post 'save_category'
  end
end

这个成员块意味着命名空间中的路由save_category需要/compagnies/一个 Company 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

希望这可以帮助!

于 2013-09-11T15:54:45.773 回答