Ruby on Rails показывает вложенные ActiveResources - PullRequest
0 голосов
/ 24 мая 2011

У меня есть приложение, которое подключается к приложению REST rails.У меня есть два ресурса: category и post;сообщение вложено в категорию.

Мне удалось успешно CRUD категории.Я могу только перечислять сообщения, но не могу показать или обновить.

Вот мой пример кода:

config / rout.rb:

resources :categories do
  resources :posts
end

resources :posts do
  resources :comments
end

resources :comments

models /post.rb:

class Post < Connector
  self.site += "/categories/:category_id"         
end

controllers / posts_controller.rb:

class PostsController < ApplicationController

  def index
    @category = Category.find(params[:category_id])
    @posts = Post.all(:params => {:category_id => @category.id})

    respond_to do |format|
      format.html
      format.xml  { render :xml => @posts }
    end
  end

  def show
    @category = Category.find(params[:category_id])      
    @post = Post.find(:id, :params => {:category_id => @category.id})
    respond_to do |format|
      format.html
      format.xml  { render :xml => @post }
    end
  end
end

маршруты рейка:

    category_posts GET    /categories/:category_id/posts(.:format)          {:action=>"index", :controller=>"posts"}
                   POST   /categories/:category_id/posts(.:format)          {:action=>"create", :controller=>"posts"}
 new_category_post GET    /categories/:category_id/posts/new(.:format)      {:action=>"new", :controller=>"posts"}
edit_category_post GET    /categories/:category_id/posts/:id/edit(.:format) {:action=>"edit", :controller=>"posts"}
     category_post GET    /categories/:category_id/posts/:id(.:format)      {:action=>"show", :controller=>"posts"}
                   PUT    /categories/:category_id/posts/:id(.:format)      {:action=>"update", :controller=>"posts"}
                   DELETE /categories/:category_id/posts/:id(.:format)      {:action=>"destroy", :controller=>"posts"}
        categories GET    /categories(.:format)                             {:action=>"index", :controller=>"categories"}
                   POST   /categories(.:format)                             {:action=>"create", :controller=>"categories"}
      new_category GET    /categories/new(.:format)                         {:action=>"new", :controller=>"categories"}
     edit_category GET    /categories/:id/edit(.:format)                    {:action=>"edit", :controller=>"categories"}
          category GET    /categories/:id(.:format)                         {:action=>"show", :controller=>"categories"}
                   PUT    /categories/:id(.:format)                         {:action=>"update", :controller=>"categories"}
                   DELETE /categories/:id(.:format)                         {:action=>"destroy", :controller=>"categories"}
     post_comments GET    /posts/:post_id/comments(.:format)                {:action=>"index", :controller=>"comments"}
                   POST   /posts/:post_id/comments(.:format)                {:action=>"create", :controller=>"comments"}
  new_post_comment GET    /posts/:post_id/comments/new(.:format)            {:action=>"new", :controller=>"comments"}
 edit_post_comment GET    /posts/:post_id/comments/:id/edit(.:format)       {:action=>"edit", :controller=>"comments"}
      post_comment GET    /posts/:post_id/comments/:id(.:format)            {:action=>"show", :controller=>"comments"}
                   PUT    /posts/:post_id/comments/:id(.:format)            {:action=>"update", :controller=>"comments"}
                   DELETE /posts/:post_id/comments/:id(.:format)            {:action=>"destroy", :controller=>"comments"}
             posts GET    /posts(.:format)                                  {:action=>"index", :controller=>"posts"}
                   POST   /posts(.:format)                                  {:action=>"create", :controller=>"posts"}
          new_post GET    /posts/new(.:format)                              {:action=>"new", :controller=>"posts"}
         edit_post GET    /posts/:id/edit(.:format)                         {:action=>"edit", :controller=>"posts"}
              post GET    /posts/:id(.:format)                              {:action=>"show", :controller=>"posts"}
                   PUT    /posts/:id(.:format)                              {:action=>"update", :controller=>"posts"}
                   DELETE /posts/:id(.:format)                              {:action=>"destroy", :controller=>"posts"}

Индекс работает нормально, я могу перечислять сообщения.

Если я в консоли:

Post.find(3, :params=>{:category_id=>2})

Я могу получить желаемый ответ, но из браузера я получаю следующую ошибку.

Failed.  Response code = 404.  Response message = Not Found.

1 Ответ

0 голосов
/ 24 мая 2011

попробуйте обновить ваши маршруты до

resources :categories do
    resources :posts do
      resources :comments
    end
  end

, тогда вы сможете получить к ним доступ как к вложенным ресурсам.Не знаете, куда движется < Connector, является ли Connector моделью, основанной на ActiveModel?

<subjective> Кроме того, если вы вкладываете более одного уровня, вам действительно нужно еще раз взглянуть на свое приложениедизайн, поскольку это быстро становится головной болью, см .: http://weblog.jamisbuck.org/2007/2/5/nesting-resources (этот код в стиле rails 2.x, но проблемы с дизайном остаются) </subjective

...