2

わかった。これは非常識です。

私は RoR を初めて使用しますが、これまで見てきたすべてのことが私の仕事の種類にとってより魅力的なものになっているので、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 ヘルパーの使用方法がわかりません (これらが何と呼ばれているのかわかりません... モデルに関連付けられたコントローラーに URL を返す、自動生成されたメソッドです)。彼らの名前が何なのかわかりません。私のモデルは Blog::Entries です。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

1

OK、ここで私はそれを行うためのかなりハッキーな方法です。これは好きではありませんが、機能します。

私の場合、モデルBlog :: Article、Blog :: Commentがあり、それらはルートにネストされています。このアプローチを使用する場合の1つの注意点は、記事をロードするときに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 に答える