如何在Rails中从多对多关系中过滤字段?

时间:2016-06-04 22:21:11

标签: ruby-on-rails ruby rails-activerecord

我有以下表格方案:

Table_1
    Name
    Field_A
    Field_B

User_Table
    Name
    Field_C
    Field_D

Table_3
    FK Table_1
    FK User_Table
    Field_E

所有关系都正常运作。我需要做这样的事情:

Table1.where(table_3.FK_Table_1: @current_user)

基本上,我只想显示属于@current_user的项目。我正在使用序列化程序获取属于Field_E的所有Table_1,但当我有2个相同的项目使用相同的Table_1时,显然它会覆盖Field_E的值}。我希望它返回Table_1中来自@current_user

的所有项目

我当前的用户工作正常,所以不用担心。我只是需要帮助来了解如何实现where声明。

任何帮助将不胜感激

2 个答案:

答案 0 :(得分:2)

您的模型是如何设置的?根据您的描述,您需要指定您加入Table1Table3,并按当前用户进行过滤。类似的东西:

class Foo
  has_many :bars
end

class Bar
  belongs_to :foo
  belongs_to :user
end

# Joining and filtering
Foo.joins(:bars).where(bars: { user: @current_user })

答案 1 :(得分:0)

您可以从RoR guides找到有关has_many :through关联的更多信息:

class Table1 < ActiveRecord::Base
  has_many :table3s
  has_many :users, through: :table3s
end

class Table3 < ActiveRecord::Base
  belongs_to :table1
  belongs_to :user
end

class User < ActiveRecord::Base
  has_many :table3s
  has_many :table1s, through: :table3s
end

然后,您可以调用@current_user.table1s来获取table1中属于@current_user的所有记录。

请注意,使用连接表(在您的情况下为table3)意味着多对多关系(1个table1可以属于许多用户,1个用户可以有多个table1)。