我有以下表格方案:
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
声明。
任何帮助将不胜感激
答案 0 :(得分:2)
您的模型是如何设置的?根据您的描述,您需要指定您加入Table1
和Table3
,并按当前用户进行过滤。类似的东西:
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)。