2015-08-31 93 views
0

我有兩種模式:商店和用戶。用戶belong_to商店和商店has_many用戶。用戶和商店分開創建,然後用戶添加一個商店,將其shop_id更改爲@shop.id通過Rails協會查詢

我需要@shop.users來查詢所有belong_to店鋪的用戶。我不知道如何做到這一點雖然。目前,唯一的連接是關聯,當用戶拿起這個按鈕店@user.shop_id被更新到正確的店:

查看:

<%= link_to 'Add As Your Shop', update_shop_url(id: @user.id, shop_id: @shop.id), class: 'button blue-button', data: { method: 'post' } %> 

控制器:

def update_shop 
    @user = User.find(params[:id]) 
    @shop = Shop.find(params[:shop_id]) 
    @user.update_attributes(shop_id: @shop.id) 
    flash[:success] = "Added Shop!" 
    redirect_to @shop 
end 

這裏ShopsController#Customers中的查詢

def customers 
    @shop = Shop.find(params[:id]) 
    @customers = Shop.users 
end 

This查詢爲我提供了錯誤undefined method 'users' for nil:NilClass,因此用戶無法找到商店。

如何在用戶選擇商店時創建正確的關聯,而不僅僅是更新shop_id參數?

+0

什麼你問的是不是真的清楚。你能告訴我們目前的方法有什麼問題,什麼是不行的,你想要做什麼......你有沒有遇到任何錯誤? – jazzytomato

+0

編輯包括錯誤 –

+0

那麼,錯誤是非常明確的......你確定'params [:id]'被分配和匹配現有的商店...? – jazzytomato

回答

-1

您希望擁有特定商店的用戶,而不是(「抽象」)Shop模型的關係。因此,您必須在店鋪實例上撥打.users,在您的示例@shop中。

def customers 
    @shop = Shop.find(params[:id]) 
    @customers = @shop.users 
end 

你的問題並不完全清楚,但我希望這有助於。另外請注意,在你的問題文本中你實際上詢問@shop.users,但你的代碼示例爲Shop.users :)。我認爲你實際上有兩個問題:如何訪問一個商店的所有用戶(「如何訪問關聯的實例?」)和「如何將一個對象分配給belongs_to關係」?

請注意,您的customers方法斷言可以找到具有該id的商店(否則會引發錯誤)。

要設置的店,你可以使用ActiveRecord這樣的:

@shop = Shop.find(params[:shop_id]) 
@user.shop = @shop