ruby-on-rails - ruby on Rails - 如何在路线、 Controller 、 View 中建立关系?有很多,属于

标签 ruby-on-rails associations relationship has-many belongs-to

我正在努力让我的关系正常运转。

我有一个用户、图库、评论模型

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

现在我应该在路由、 Controller 和 View 中做什么来将这一切连接起来? 请帮我 ?找出答案是相当令人困惑的。如果可以的话,我不希望它像在railscast中一样嵌套,但我希望对于每个模型,例如画廊我可以输入用户,例如评论我可以找到并输入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

在你的 Controller 中,当创建一个新对象时,你应该从它所属的对象开始:

@comment = current_user.comments.build(params[:comment])

例如,这会将评论的 user_id 设置为当前用户。

在 View 中,没有太大区别,只需在 Controller 中获取@comments变量即可:

@comments = @gallery.comments

并在您的 View 中使用它。

当您想要定义表单助手来创建新评论时,可能不太直观,例如:

<%= form_for([@gallery, @comment]) do |f| %>
  ...
<% end %>

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

关于ruby-on-rails - ruby on Rails - 如何在路线、 Controller 、 View 中建立关系?有很多,属于,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15937989/

相关文章:

MySQL表关系和md5 hash的使用

ruby-on-rails - 朱比 :- Unable to install devise on windows using jruby

javascript - 首先安装 Rails : Rake aborted no javascript runtime

ruby - Rails 附加类型以使用 has_many :through and association extensions 连接表

ruby-on-rails - ActiveRecord 何时会保存关联?

c# - Entity Framework 中的派生类型

ruby-on-rails - Rails 如何处理方法名称不友好的枚举值?

ruby-on-rails - 为什么测试在生产模式下运行并导致我的脚本/运行程序失败?

ruby-on-rails - ActiveRecord 中的零个或一个关联

java - 如何检索相关的 Odata 实体 Odata4j