在rails

时间:2016-01-02 17:31:33

标签: ruby-on-rails ruby database

我一直在努力解决一个被证明非常困难的问题。我有一个用户模型,一个照片模型和一个评论模型。现在我的网站工作方式是用户可以对特定照片有很多评论。在反面,评论只能属于特定照片上的特定用户。

我已经阅读了有效记录协会的文档,而且我收集到的是我们无法使用has_many :through关联,因为它似乎适用于模型之间的多态关联。我想知道是否可以在一方使用has_many :through关联,在背面使用belongs_to关联。

任何提示,指示和建议?我刚刚开始使用Ruby on Rails

感谢。

3 个答案:

答案 0 :(得分:2)

这不会起作用吗?

class User
  has_many :photos
  has_many :comments
end

class Photo
  belongs_to :user
  has_many :comments
end

class Comment
  belongs_to :user
  belongs_to :photo
end

用户有很多照片和评论(他上传/撰写的照片和评论),每条评论都属于用户(作家)和评论的照片。

答案 1 :(得分:1)

#app/models/user.rb
class User < ActiveRecord::Base
   has_many :photos
   has_many :comments, through: :photos #-> probably won't work but I'd try it first
end

#app/models/photo.rb
class Photo < ActiveRecord::Base
   belongs_to :user
   has_many :comments do
       def current_user #-> photo.comments.current_user
          where user_id: self.user_id
       end
   end
end 

#app/models/comment.rb
class Comment < ActiveRecord::Base
   belongs_to :photo
   belongs_to :user
end

-

您可以按如下方式访问照片的评论:

<% @user.photos.each do |photo| %>
   <%= photo.comments.each do |comment| %>
      <%= comment %>
   <% end %>
<% end %>

如果您只想显示用户的评论,则可以使用current_user ActiveRecord Association Extension

<% @user.photos.each do |photo| %>
   <%= photo.comments.current_user.each do |comment| %>
      <%= comment %> #-> comments where user_id will be the same as photo's user_id
   <% end %>
<% end %>

答案 2 :(得分:0)

你可以这样做:

User 
 has_many :comments

Photo
  has_many :comments
  belongs_to :user

Comment
  belongs_to :user
  belongs_to :photo