Ruby on rails Rails:更好的应用程序基础架构
我正在尝试制作一个评论系统,与StackOverflow的评论系统相同。有一个第一级的评论,还有一堆第二级的评论,附在上面。第一个简单的想法就是创建一个单独的模型,sub_comment。但我仍然有这样的感觉,我应该继承初始注释的属性,只添加一个简单的注释id 我还是一个Rails新手,所以问题是——我能做到吗?怎么用?这是一个简单的问题吗Ruby on rails Rails:更好的应用程序基础架构,ruby-on-rails,ruby,architecture,Ruby On Rails,Ruby,Architecture,我正在尝试制作一个评论系统,与StackOverflow的评论系统相同。有一个第一级的评论,还有一堆第二级的评论,附在上面。第一个简单的想法就是创建一个单独的模型,sub_comment。但我仍然有这样的感觉,我应该继承初始注释的属性,只添加一个简单的注释id 我还是一个Rails新手,所以问题是——我能做到吗?怎么用?这是一个简单的问题吗 class sub_comment < comment class sub_comment将共享行为放在一个模块中,我不确定我是否理解您的意思。你
class sub_comment < comment
class sub_comment
模型继承?当然,我需要所有的控制器方法来添加/删除这些子注释。或者我应该建立一个单一的评论模型,其中第一级评论的父级为nil
正确的解决方案是什么
PS.可以自由地为任何涉及该主题的书提供建议。我在这里接受自我教育,所以我很想阅读所有能够澄清未来应用程序架构问题的内容。我发现使用带有两个指针的简单树结构更容易实现回溯:
class Post < ActiveRecord::Base
has_many :comments
end
class Comment < ActiveRecord::Base
acts_as_tree
belongs_to :post
named_scope :top_level, :conditions => { :parent_id => nil }
end
您甚至可以使用AJAX或通过在下一层之后提取一层来提取多个级别的注释:
# Repeat while comments are found
loop do
level = @post.comments.find(:all, :conditions => { :parent_id => @comments.collect(&:id) })
if (level.empty?)
break
else
@comments += level
end
end
可以根据演示的需要对它们进行排序。一个选项是拥有两个单独的类,并将共享行为放在一个模块中。这样一来,您就不会执行单表继承(这就是您的继承示例的意思,这是我遇到的问题),但您也不会复制代码。从概念上讲,您正在尝试创建自引用关联。这当然是最干净的方式,因为您不必担心额外的表和模型,尽管设置起来可能很复杂
我建议您查看,它将一步一步地指导您如何开始。简短而甜蜜的回答是,我将使用您的“父id为零”方法进行顶级评论,显然子评论将具有父id。记住,在Rails世界里,DRY主宰着一天。如果您可以使用一个类(在这种情况下它是有意义的),那么您应该。>将共享行为放在一个模块中,我不确定我是否理解您的意思。你能解释一下吗?
# Repeat while comments are found
loop do
level = @post.comments.find(:all, :conditions => { :parent_id => @comments.collect(&:id) })
if (level.empty?)
break
else
@comments += level
end
end