問題
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で概説されている行を参照して
編集された解決策人々が反応を読まない場合:
<%= form_for [:admin, @person, @image] do |f| %>
古い応答:
Admin名前空間とPeopleand Imagesリソースを持つプロジェクトがあります。これは、Rails3でform_forを構築する方法ですが、それをよりクリーンにする方法をまだ見つけていません...
<%= form_for [@person, @image], :url => admin_person_images_path do |f| %>
@ダグラス:それは私のために働いていません。私の見解では、ルートの名前は複数形にする必要があります。私が推奨したい場合、エラーは次のとおりです。
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メソッドなどにはアクセスしません。
Rails 3)で、(新しいリソースと編集リソースの両方で)正しく機能した唯一のソリューションは次のとおりです。
form_for @image, :url => url_for([:admin, @person, @image])