Rails 3 - Помощь с модулем комментирования - PullRequest
1 голос
/ 25 января 2011
class CommentsController < ApplicationController

  def create

    @commentable= context_object()
    @comment = @commentable.comments.build(params[:comment].merge(:user_id => current_user.id))

    if @comment.save
      respond_to do |format|
        format.js
      end
    else
      render :action => 'new'
    end
  end

  private  

  def context_object
    params[:constraint][:context_type].singularize.classify.constantize.find( context_id )
  end

  def context_id
    params["#{ params[:constraint][:context_type].singularize }_id"]
  end

end

Этот модуль комментирования помог мне, но сегодня утром я столкнулся с проблемой, возможно, из-за того, что использовал вложенные ресурсы.По сути, теперь у меня есть URL-адрес:

/projects/3/albums/6/attachments/84

Когда я комментирую эту страницу, я получаю сообщение об ошибке:

ActiveRecord::RecordNotFound (Couldn't find Project without an ID):
  app/controllers/comments_controller.rb:102:in `context_object'
  app/controllers/comments_controller.rb:14:in `create'

Мой файл маршрутов выглядит так:

resources :projects do
  resources : albums do
    resources :attachments
  end
end

resources :attachments do
    resources :comments, :only => [:create, :update,:destroy],
              :constraint => {:context_type => "conversations"}
end

Любые идеи о том, как заставить модуль комментирования хорошо играть с комментированием project>Album>Attachment?

Спасибо за ввод,

1 Ответ

0 голосов
/ 26 января 2011

Опубликовать это как ответ, чтобы не загромождать комментарии к исходному вопросу.

Поскольку у вас нет необходимости сохранять вложения доступными через /attachments - что делает блок второго ресурса бесполезным,сделайте что-то вроде этого:

resources :projects do
  resources :albums do
    resources :attachments do
      resources :comments, :only => [:create, :update,:destroy],
                           :constraint => {:context_type => "conversations"}
    end
  end
end

Это изменит ваши помощники маршрутов (_path и _url), просмотрите ваши контроллеры и представления и измените их, чтобы отразить ваши новые помощники.

В частности, attachment_comments_path становится project_album_attachment_comments_path.

Полный список маршрутов для этих моделей можно просмотреть, запустив rake routes в консоли.Я также рекомендую вам поближе познакомиться с Руководством по маршрутизации Rails .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...