Ruby on rails 在Rails中实现注释的最佳方法是什么?

Ruby on rails 在Rails中实现注释的最佳方法是什么?,ruby-on-rails,Ruby On Rails,切中要害:我想把帖子放在有很多评论的地方,但我不想创建一个单独的评论控制器和后续视图。主要是因为评论不会出现在其他任何地方,而是出现在帖子的显示动作中。还是我打破了MVC范式?正如你所说,你正在打破MVC范式。MVC的要点是将所有内容分割成小块,以便更易于管理。至少我是这么看的 如何在没有特定控制器的情况下创建注释。在帖子上显示的部分是最简单的部分: @comments = @post.comments 你越偏离MVC范式,你以后遇到的问题就越多。例如,如果您想为您的评论添加管理视图,那么通过

切中要害:我想把帖子放在有很多评论的地方,但我不想创建一个单独的评论控制器和后续视图。主要是因为评论不会出现在其他任何地方,而是出现在帖子的显示动作中。还是我打破了MVC范式?

正如你所说,你正在打破MVC范式。MVC的要点是将所有内容分割成小块,以便更易于管理。至少我是这么看的

如何在没有特定控制器的情况下创建注释。在
帖子上显示的部分是最简单的部分:

@comments = @post.comments

你越偏离MVC范式,你以后遇到的问题就越多。例如,如果您想为您的评论添加管理视图,那么通过评论控制器对其进行扩展会更容易。否则,您将在Posts控制器中对您的评论执行多个操作(例如,批准评论、删除评论、voteup评论等)


这就是说,你总是可以把事情联系起来,这样你评论上的动作就可以引导用户回到发帖的地方。因此,与评论相关的操作将驻留在评论控制器中,但用户通常使用帖子(及其相关评论)。

在系统的内部域模型和系统公开的公共界面之间有一个基本区别

如果您使用的是关系数据库,那么最好使用

Comment.belongs_to :post
Post.has_many :comments
系统的内部域模型可以帮助您设计公共接口,但您也可以根据需要定制公共接口,而无需强制使其严格反映您的内部域模型

在您的情况下,我建议使用
commentscoontroller
。但是在这个控制器类中,您不需要所有正常的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

我想补充一点,REST操作并不是唯一属于控制器的东西。一些框架(例如RestfulAuthentication)使用用户在注释控制器中写入的回调。
# config/routes.rb
MyApp::Application.routes.draw do
  resources :posts do
    resources :comments, :only => [:create]
  end
end