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/が機能するために会社 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 に答える