web-dev-qa-db-ja.com

名前空間form_forのネストされたリソース

問題

Form_forヘルパーは、名前空間内のネストされたリソースへのパスを誤って決定します。問題のモデルは次のとおりです。Forum :: ThreadおよびForum :: Replyそれぞれ、modelsディレクトリの下の「forum」というサブフォルダにあります。これはRails 3 BETA3にあります。

routes.rb

  namespace :forum do
    root :to => 'threads#index'
    resources :threads do
      resources :replies
    end
  end

app/views/forum/replys/_form.html.haml

...
  - form_for [@thread, @reply] do |f|
...

app/controllers/forum/replys_controller.rb

...
  def new
    @reply = Forum::Reply.new
  end
...

エラー

undefined method `forum_thread_forum_replies_path'

上記の_form.html.hamlで概説されている行を参照して

30
user19302

編集された解決策人々が反応を読まない場合:

<%= form_for [:admin, @person, @image] do |f| %>

古い応答:

Admin名前空間とPeopleand Imagesリソースを持つプロジェクトがあります。これは、Rails3でform_forを構築する方法ですが、それをよりクリーンにする方法をまだ見つけていません...

<%= form_for [@person, @image], :url => admin_person_images_path do |f| %>
46
Bitterzoet

@ダグラス:それは私のために働いていません。私の見解では、ルートの名前は複数形にする必要があります。私が推奨したい場合、エラーは次のとおりです。

undefined method `admin_admin_person_admin_image_path' for #<#<Class:0x55976d0>:0x55a9bc8>

Newで機能した私のソリューション:

form_for @image, url: admin_person_images_path(@person, @image)

編集のために働いた私の解決策:

form_for @image, url: admin_person_image_path(@person, @image)

これを1つの形式に組み合わせる解決策はありますか?

編集(フォーム内の新しいネストされた名前空間ルートの解決策):
routes.rbに次のロジックがあります

resources :mobile_users do
 namespace :candystore do
  resource :transactions
 end
end

New_mobile_user_candystore_transactionsのフォームは次のとおりです。

<%= form_for [@mobile_user], url: mobile_user_candystore_transactions_path(@mobile_user), method: :post do |f| %>

candystore :: TransactionsController createメソッドにアクセスし、MobileUsercreateメソッドやCandystore :: TransactionsControllerupdateメソッドなどにはアクセスしません。

2
neonmate

Rails 3)で、(新しいリソースと編集リソースの両方で)正しく機能した唯一のソリューションは次のとおりです。

form_for @image, :url => url_for([:admin, @person, @image])
2
Rafael Martinez