Каков наилучший способ реализации комментариев в Rails? - PullRequest
1 голос
/ 24 декабря 2010

К моменту: я хочу поместить Post has_many Comments, но я не хочу создавать отдельный контроллер комментариев и последующие представления.Главным образом потому, что комментарии никогда не будут отображаться где-либо еще, кроме как внутри действия SHOW.Или я нарушаю парадигму MVC?

Ответы [ 3 ]

1 голос
/ 24 декабря 2010

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

Если вы используете реляционную базу данных, рекомендуется иметь

Comment.belongs_to :post
Post.has_many :comments

Модель внутреннего домена вашей системы может помочь вам спроектировать ваш общедоступный интерфейс, но вы также можете адаптировать свой открытый интерфейс так, как вы этого хотите, не заставляя его строго отражать модель внутреннего домена!

В вашем случае я бы предложил иметь CommentsController. Но в этом классе контроллеров вам не нужны все обычные действия REST. Вам нужно только несколько из них.

# app/controllers/comments_controller.rb
class CommentsController < ApplicationController
  respond_to :js
  def create
    @post = Post.find(params[:post_id])
    @comment = post.comments.create(params[:comment])
    respond_with [@post, @comment]
  end
end

В этом контроллере у вас only есть действие create, которое будет целью формы "новый комментарий" в нижней части страницы с сообщением. Вам не нужны никакие другие действия REST, потому что люди никогда не просматривают, не редактируют и не удаляют комментарии изолированно - они только создают новые, а не со специальной страницы новых комментариев. Маршрутизация для этого выглядит следующим образом:

# config/routes.rb
MyApp::Application.routes.draw do
  resources :posts do
    resources :comments, :only => [:create]
  end
end
1 голос
/ 24 декабря 2010

Как вы сказали, вы нарушаете парадигму MVC. Смысл MVC состоит в том, чтобы разбить все на куски размером с кусочек, чтобы сделать его более управляемым. Вот как я это вижу, по крайней мере.

Как будут создаваться комментарии без специального контроллера для них. Показывающая часть на Post является легкой частью:

@comments = @post.comments
0 голосов
/ 24 декабря 2010

Чем больше вы отклоняетесь от парадигмы MVC, тем больше проблем у вас будет позже.Например, если вы хотите добавить административные представления для ваших комментариев, было бы проще расширить их с помощью контроллера комментариев.Иначе у вас будет несколько действий для вашего комментария в контроллере сообщений (например, Approve_comment, Delete_Comment, Voteup_Comment и т. Д.).

При этом вы всегда можете связать вещи, чтобы действия накомментарии направляют пользователя обратно к посту, который его создал.Таким образом, действия, связанные с комментариями, будут находиться в контроллере комментариев, но пользователь обычно работает с сообщениями (и связанными с ними комментариями).

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