2

好的。疯了吧。

我是 RoR 的新手,我真的很想参与其中,因为到目前为止我所看到的一切都使它对我所做的工作类型更具吸引力。

但是,我似乎无法用 RoR完成一件非常简单的事情。

我想要这些控制器:

/admin/blog/entries (index/show/edit/delete)
/admin/blog/categories (index/show/edit/delete)
/admin/blog/comments (index/show/edit/delete)
... and so on

这些模型:

Blog::Entry    (table: blog_entries)
Blog::Category (table: blog_categories)
Blog::Comments (table: blog_comments)
... and so on

现在,我已经经历了相当多的痛苦才能完成这项工作。我的第一次尝试是生成脚手架(我使用的是 2.2.2)。我生成了脚手架,但必须移动模型,然后修复对控制器中模型的引用(请参阅在控制器中找不到命名空间内的 Ruby on Rails 模型)。

这已经是一个很大的痛苦,但是,嘿,我让它工作了。现在虽然 form_for 不起作用,我不知道如何使用 url 帮助程序(我不知道这些被称为什么......它们是自动生成的方法,将 URLs 返回到与模型关联的控制器)。我不知道他们叫什么名字。我的模型是博客::条目。我试图弄乱 route.rb 的地图资源方法,但没有运气。当我尝试将 form_for 与我的模型一起使用时,出现此错误

undefined method `blog_entries_path' for #<ActionView::Base:0xb6848080>

现在。这真的很令人沮丧。我不会为了使用这个框架而完全破坏我的代码组织,如果我不知道如何完成这个简单的任务(我已经研究了至少 5 个小时),那么我根本无法继续。

关于如何实现这一点有什么想法吗?

谢谢

编辑

这是我的路线:

             admin_blog_entries GET    /admin_blog_entries                  {:controller=>"admin_blog_entries", :action=>"index"}
   formatted_admin_blog_entries GET    /admin_blog_entries.:format          {:controller=>"admin_blog_entries", :action=>"index"}
                                POST   /admin_blog_entries                  {:controller=>"admin_blog_entries", :action=>"create"}
                                POST   /admin_blog_entries.:format          {:controller=>"admin_blog_entries", :action=>"create"}
           new_admin_blog_entry GET    /admin_blog_entries/new              {:controller=>"admin_blog_entries", :action=>"new"}
 formatted_new_admin_blog_entry GET    /admin_blog_entries/new.:format      {:controller=>"admin_blog_entries", :action=>"new"}
          edit_admin_blog_entry GET    /admin_blog_entries/:id/edit         {:controller=>"admin_blog_entries", :action=>"edit"}
formatted_edit_admin_blog_entry GET    /admin_blog_entries/:id/edit.:format {:controller=>"admin_blog_entries", :action=>"edit"}
               admin_blog_entry GET    /admin_blog_entries/:id              {:controller=>"admin_blog_entries", :action=>"show"}
     formatted_admin_blog_entry GET    /admin_blog_entries/:id.:format      {:controller=>"admin_blog_entries", :action=>"show"}
                                PUT    /admin_blog_entries/:id              {:controller=>"admin_blog_entries", :action=>"update"}
                                PUT    /admin_blog_entries/:id.:format      {:controller=>"admin_blog_entries", :action=>"update"}
                                DELETE /admin_blog_entries/:id              {:controller=>"admin_blog_entries", :action=>"destroy"}
                                DELETE /admin_blog_entries/:id.:format      {:controller=>"admin_blog_entries", :action=>"destroy"}
                           home        /                                    {:action=>"index", :controller=>"index"}
                                       /:controller/:action/:id
                                       /:controller/:action/:id.:format

那看起来不太对劲。这是我的 routes.rb (已删除评论):

ActionController::Routing::Routes.draw do |map|

  map.resources :admin_blog_entries

  map.home '', :controller => 'index'

  map.connect ':controller/:action/:id'
  map.connect ':controller/:action/:id.:format'
end
4

3 回答 3

2

您是否尝试过查看“rake routes”给您的路线列表?如果您的 routes.rb 是正确的,它应该向您显示博客条目路由的正确名称。

另外,也许这会有所帮助: http: //www.coreywoodcox.com/2008/08/18/rails-namespaces-subdomains/

编辑:

好吧,那么调用路由的正确方法是 admin_blog_entries_path 而不是 blog_entries_path。

于 2009-05-24T23:43:07.333 回答
1

好的,这是我相当老套的做法,我不喜欢但确实有效。

就我而言,我有模型 Blog::Article、Blog::Comment,它们嵌套在路由中。如果使用这种方法的一个警告是在 Blog::CommentsController 中加载文章时你可以期望 params[:article_id] 或 params[:blog_article_id]。绝不是好的,但就像我说的那样。它确实有效:/

blog.resources :articles do |article|
  article.resources :comments
end

blog.resources :blog_articles, :controller => 'articles' do |blog_article|
  blog_article.resources :blog_comments, :controller => 'comments'
end
于 2010-04-29T19:12:52.783 回答
1

您的 routes.rb 应该如下所示:

map.namespace :admin do |admin|
  admin.namespace :blog do |blog|
    blog.resources :entries
    blog.resources :categories
    ...
  end
end

但我不确定如何在你的 url 中处理这个 '/blog/' 部分(我还没有在我的模型中使用任何命名空间)。但是通过这些路线,您将能够使用:

admin_blog_categories_path               => '/admin/blog/categiries'
admin_blog_category_path(@some_category) => '/admin/blog/categories/1'

等等。

于 2009-05-26T21:33:15.823 回答