2014-06-24 38 views
1

我有模型: 用戶has_many:訂單結束; Order belongs_to:user end;與用戶自加入關聯

此協會工作得很好,但現在我希望創建訂單的用戶可以爲此訂單添加其他用戶。

編輯:

我的訂單/ show.html.erb我有這樣的事情

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

<%結束%> 我知道這是錯誤的,因爲我在這裏選擇ID用戶誰創造順序,但在這種情況下,我有定義正確的關聯問題可能這是個好主意? =>

order has_many :workes, class_name: 'User' 

我該如何實現此功能?

+1

所以你想有一個多對多的用戶和訂單之間的關係?聽起來像是['has_many:through']的工作](http://guides.rubyonrails.org/association_basics.html)。 – tadman

回答

0

您正在尋找has_and_belongs_to_many協會:

創建連接表'orders_users'

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 

而且都應該工作。

+0

我創建了:create_table「orders_users」,id:false,force:true do | t | t.integer「order_id」 t.integer「user_id」 end。有了這個工作得很好。 Thx幫助我。 – Panczo

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 

這將創建一個以秩序和被稱爲「貢獻者」用戶列表之間的許多關係:

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

加入

你需要添加另一個嵌到系統 - 與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 

這將允許您根據需要爲每個order設置多少users - 允許您撥打:

@user = User.first 
@user.orders 


@order = Order.first 
@order.users 

-

只注意到這不是self-join。我可以重構,如果你想它是自我指涉