2

我基本上按照 ROR 指南http://guides.rubyonrails.org/association_basics.html#the-has_many-through-association创建关系模型,如下所示。

由于直通关联,我认为@user.trips 会为您提供用户创建的行程和属于该用户的行程。但是,当我@user.trips.count在控制台中进行操作时,结果只是用户创建的旅行次数;通过“组”关联属于用户的行程不计算在内。

问题:如何让我的视图同时显示用户创建的行程和用户通过“组”所属的行程?

用户/show.html.erb

<% unless @user.all_trips.empty? %>
  <% @user.all_trips.each do |trip| %>
     <!-- Content -->
  <% end %>
<% end %>

用户.rb

class User < ActiveRecord::Base
  has_many :group_trips, :through => :groups,
                         :source   => :trip
  has_many :trips, :dependent => :destroy
  has_many :groups

  def all_trips
    self.trips | self.group_trips
  end


end

行程.rb

class Trip < ActiveRecord::Base
  belongs_to :user
  belongs_to :traveldeal
  has_many :groups

  has_many :users, :through => :groups
end

组.rb

class Group < ActiveRecord::Base
  belongs_to :trip
  belongs_to :user
end

谢谢!

编辑:根据 TSherif 的部分解决方案修改代码。编辑 2:修复了 all_trips 方法。在这一点上,一切似乎都对我有用。

4

1 回答 1

2

哦!我想我明白你想要做什么以及为什么这是一个问题。我想知道为什么has_many :trips被调用了两次。但据我了解,您有两种不同的 User关系Trip。这两个不能同名,否则一个会隐藏另一个。尝试这样的事情:

class User < ActiveRecord::Base
  has_many :group_trips, :through => :groups,
                         :class_name   => "Trip"
  has_many :trips, :dependent => :destroy
  has_many :groups

  def all_trips
    Trip.joins(:groups).where({:user_id => self.id} | {:groups => {:user_id => self.id}})
  end
end

或者,如果您使用的是旧版本的 Rails,它没有MetaWhere

def all_trips
  Trip.joins(:groups).where("(trips.user_id = ?) OR (groups.user_id = ?)", self.id, self.id)
end
于 2012-04-14T10:39:16.140 回答