我有模特: 用户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'
如何实现此功能?
答案 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 :through
或has_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}}。如果你想让它自我指涉,我可以重构