0

在 Rails 中假设我有 3 个模型 A、B 和 C,每个模型都有自己的控制器。

A型

has_many :b

模型 B 具有属性 :a_id 和 :c_id (B 和 A 的外键)

属于_to :a
属于_to :c

具有属性的模型 C :item1、:item2 等。

has_many :b

我想显示由特定 a_id 过滤的 Model C 中的项目列表。由于各种原因,我不想在 Model C 上携带 b_id 外键。实现这一点的最佳方法是什么?我想到了数组,但似乎很复杂。我确信有一个更简单的方法。

谢谢

4

3 回答 3

0

尝试以这种方式建立关系

Model A
  has_and_belongs_to_many :c

Model C
  has_and_belongs_to_many :a

Model B
  belongs_to :a
  belongs_to :c

这样您就可以像这样在控制台中尝试获取数据

# a = user, c = customer
@user.customers # you get all customers for particular user
@customer.users # you get all users for particular customer

在HATBM中查看更多信息

于 2012-10-26T07:25:00.777 回答
0

感谢您的建议,我不想因为我有其他依赖关系而弄乱模型关联,所以我想出了一个涉及 pluck 的解决方案。

我用过这样的东西:

@pluckfromModelC = ModelB.where("attribute_I_want_mapping =?", @attribute_to_map_from).uniq.pluck(:item_id)

这产生了一个数组。

在我看来,然后我创建了一个循环

<% @pluckfromModelC.each do |x| %>

    <% @founditem = Item.find(x) %>
    <%= @founditem.description %>
     ...etc.

<% end %>
于 2012-10-26T10:34:29.997 回答
0

试试这个:

C.find(:all, :joins => [:B], :conditions => ["a_id = ", id_of_a])
于 2012-10-26T08:30:46.693 回答