我正在努力让我的关系在轨道工作。
我有一个用户,画廊,评论模型
class Gallery
has_many :comments
belongs_to :user
end
class User
has_many :comments
has_many :galleries
end
class Comment
belongs_to :gallery
belongs_to :user
end
现在我应该在路由,控制器和视图中做些什么来把这些链接起来呢?请帮帮我?要找出答案是相当令人困惑的。如果可以,我不希望它像在railscast一样嵌套,但我希望每个模型,例如gallery我可以输入用户,例如comment我可以找到并输入galleryid和userid。
我现在完全被遗忘了,不知道该做什么。请给予一些帮助。谢谢。这是一个复杂的主题,不能简单地告诉你怎么做,但我会试着帮一点忙。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 %>
我希望这能帮助你开始。