自我加入与用户的关联

时间:2014-06-24 08:23:48

标签: ruby-on-rails ruby associations

我有模特: 用户has_many:订单结束; 订单belongs_to:用户端;

此关联工作得非常好,但现在我希望创建订单的用户可以为此订单添加其他用户。

编辑:

在我的订单/ show.html.erb中我有类似的东西

<%= form_for @order do |f| %>
<td>
  <%= f.select :user_id, @prac %>
</td>

&lt;%end%&gt; 我知道这是错的,因为我在这里选择创建订单的id用户,但在这种情况下我有定义正确关联的问题可能这是个好主意? =&GT;

order has_many :workes, class_name: 'User'

如何实现此功能?

3 个答案:

答案 0 :(得分:0)

您可以与同一个班级建立多个关系,但您可能希望区分它们(订单的其他用户可能不是所有者)。类似的东西:

class Order < ActiveRecord::Base
  belongs_to: user
  has_many: contributors, , class_name: 'User' # need to specify else Rails will look for a "Contributor" class
end

这将在订单和名为&#34;贡献者&#34;的用户列表之间创建一对多关系:

owner = order.user # the initial user
contributors = order.contributors # a list of users related to this order.

答案 1 :(得分:0)

您正在寻找has_and_belongs_to_many协会:

创建联接表&#39; orders_users&#39;

create_table :contributors_orders, :id => false do |t|
  t.integer :contributor_id
  t.integer :user_id
end

添加关联:

class Order < ActiveRecord::Base
  belongs_to :user
  has_and_belongs_to_many :contributors, class_name: 'User'
end

所有人都应该工作。

答案 2 :(得分:0)

<强>加入

您需要在系统中添加另一个cog - 使用has_many :throughhas_and_belongs_to_many联接表

Martin所述,您需要执行以下操作:

#app/models/user.rb
Class User < ActiveRecord::Base
   has_and_belongs_to_many :orders
end

#app/models/order.rb
Class Order < ActiveRecord::Base
   has_and_belongs_to_many :users
end

#orders_users table
order_id | user_id

这样您就可以根据需要设置users order@user = User.first @user.orders @order = Order.first @order.users - 允许您致电:

self-join

-

注意到这不是{{1}}。如果你想让它自我指涉,我可以重构