问题
form_for帮助程序错误地确定了命名空间内嵌套资源的路径。有问题的模型分别是:论坛::主题和论坛::回复,位于我的模型目录下名为“论坛”的子文件夹中。这是在Rails 3 BETA 3中。
的routes.rb
namespace :forum do
root :to => 'threads#index'
resources :threads do
resources :replies
end
end
应用/视图/论坛/回复/ _form.html.haml
...
- form_for [@thread, @reply] do |f|
...
应用/控制器/论坛/ replies_controller.rb
...
def new
@reply = Forum::Reply.new
end
...
错误
undefined method `forum_thread_forum_replies_path'
参考上面_form.html.haml
中概述的行答案 0 :(得分:46)
编辑解决方案以防人们不读取反应:
<%= form_for [:admin, @person, @image] do |f| %>
旧回复:
我有一个带有管理命名空间和人物和图像资源的项目,这是我在rails3中构建form_for的方式,我还没有找到一种方法来做到更清洁......
<%= form_for [@person, @image], :url => admin_person_images_path do |f| %>
答案 1 :(得分:2)
undefined method `admin_admin_person_admin_image_path' for #<#<Class:0x55976d0>:0x55a9bc8>
我的新解决方案:
form_for @image, url: admin_person_images_path(@person, @image)
我的解决方案适用于编辑:
form_for @image, url: admin_person_image_path(@person, @image)
我是否有任何解决方案将其组合成一种形式?
编辑(表单中新的嵌套命名空间路由的解决方案):
现在我在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创建方法而不是像MobileUser创建方法或Candystore :: TransactionsController更新方法。
答案 2 :(得分:2)
在Rails 3中,唯一正确对我有用的解决方案(对于新资源和编辑资源)是:
form_for @image, :url => url_for([:admin, @person, @image])
答案 3 :(得分: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 %>