5

我正在努力让我在 Rails 中的关系正常工作。

我有一个用户、画廊、评论模型

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 中那样嵌套,但我想要每个模型,例如我可以输入用户的画廊,例如我可以找到并输入画廊 ID 和用户 ID 的评论。

我现在完全被遗忘了,不知道该怎么办。请提供一些帮助。谢谢。

4

1 回答 1

8

这是一个复杂的主题,不能简单地告诉你如何去做,但我会尽力提供一些帮助。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 %>

我希望这可以帮助您入门。

于 2013-04-10T23:38:39.133 回答