30

問題

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

ルート.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で概説されている行を参照してください

4

4 に答える 4

47

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

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

古い応答:

私はadmin名前空間とPeopleandImagesリソースを備えたプロジェクトを持っています。これは、rails3でform_forを構築する方法ですが、それをよりクリーンにする方法をまだ見つけていません...

<%= form_for [@person, @image], :url => admin_person_images_path do |f| %>
于 2010-04-28T10:01:34.293 に答える
2

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

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::TransactionsController更新メソッドにはアクセスしません。

于 2013-11-18T12:58:24.920 に答える
2

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

form_for @image, :url => url_for([:admin, @person, @image])
于 2014-05-03T07:54:58.053 に答える
0

上記の答えはどれも私にはうまくいきませんでした-私は「メディア」名前空間でラップされた単純なカテゴリ/サブカテゴリの関係を持っています。

だから私はネストされたリソースに名前空間を付けました

  namespace :media do
    resources :categories do
      resources :subcategories
    end
  end

名前空間モデルも

class Media::Category < ActiveRecord::Base
end

class Media::Subcategory < ActiveRecord::Base
end

結局、私はサブカテゴリの_formでこれに行き着きました:

<% theurl = @subcategory.new_record? ? media_category_subcategories_path(@category) : media_category_subcategory_path(@category,@subcategory)
   themethod = @subcategory.new_record? ? "POST" : "PATCH" %>
<%= form_for @subcategory, url: theurl , method: themethod do |f| %>
...
<% end %>
于 2021-08-11T00:39:03.590 に答える