30

问题

form_for 帮助程序错误地确定了命名空间内嵌套资源的路径。有问题的模型分别是:Forum::ThreadForum::Reply,位于我的模型目录下名为“forum”的子文件夹中。这是在 Rails 3 BETA 3 中。

路线.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 中的上述行

4

4 回答 4

47

编辑解决方案以防人们不阅读反应:

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

旧回应:

我有一个带有管理命名空间和人员和图像资源的项目,这是我在 rails3 中构建 form_for 的方式,我还没有找到一种更清洁的方法......

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

@Douglas:这对我不起作用。在我看来,路线中的名称应该是复数形式。当我喜欢推荐时,错误是:

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)

有什么解决方案可以将其组合成一种形式吗?

编辑(表单中新嵌套命名空间路由的解决方案):
现在我在 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 更新方法。

于 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 回答