这是一个复杂的主题,不能简单地告诉你如何去做,但我会尽力提供一些帮助。Zippie 的建议很好,你应该通过教程来了解不同类型的关系。
在您的数据库中,您将需要:
create_table :gallery do |t|
t.user_id
end
create_table :comments do |t|
t.gallery_id
t.user_id
end
这些是 Rails 用来匹配模型的外部索引(外部索引进入指定belongs_to 关系的模型中)。
至于您的路线,没有单一的解决方案,但您可能想要嵌套它们,以便您可以执行 /users/comments 或 /galleries/comments 之类的操作:
resource :users do
resource :comments
end
resource :galleries do
resource :comments
end
您也可以简单地将它们分开:
resources :users, :galleries, :comments
在您的控制器中,当创建一个新对象时,您应该从它所属的对象中执行此操作:
@comment = current_user.comments.build(params[:comment])
例如,这会将评论的 user_id 设置为当前用户。
在视图中,并没有太大区别,只需像这样在控制器中获取@comments 变量:
@comments = @gallery.comments
并在您的视图中使用它。
当您想要定义表单助手来创建新评论时,它可能不太直观,例如:
<%= form_for([@gallery, @comment]) do |f| %>
...
<% end %>
我希望这可以帮助您入门。