2012-05-24 38 views
1

我正在使用rails 3.2.3並對查詢有疑問。Ruby on Rails - 如何查詢控制器上的型號/條件?

我讀過使用arel代替命名作用域是有利的。

基本上在我的應用程序中,當用戶登錄時,我希望他看到他創建的產品。 因此而不必在我控制器指數

products=Product.find(:all) 

我一直在尋找類似

products=Product.find(:all, :conditions....) 

的事情是,我的用戶和產品型號都具有HABTM關係(它真的有be),我不知道如何加入這些表格,以便只顯示由current_user插入的產品(插入工作正常)

是否必須添加搜索方法在我的產品模型中? 或者這可以通過在索引控制器中傳遞:conditions來完成?

基本上邏輯是:

- >獲取的所有產品

- >內與products_users HABTM表連接,並得到所有的產品,其中products_users.user_id = current_user.id。返回結果。

我不知道我是否缺少這裏的東西......有關如何編碼的任何提示?我有點困惑。

在此先感謝

問候

回答

1
if user_sighed_in? 
    @products = current_user.products 
else 
    @products = Product.scoped 
end 

OFC u必須在用戶模型中定義的關聯

has_many :products 
+3

它最好不使用'。所有'在你的控制器中。你可以返回關係:'Product.scoped'。這裏的原因是爲未來做好準備,您可以使用分段緩存 - 儘管您從緩存中獲取頁面內容,但您不會很高興知道昂貴的DB查詢仍然會被觸發。 – jdoe

+0

大聲笑,ofc它只是他的代碼的談話......至少他需要範圍或分頁結果(無論如何,我投票贊成你的好評) –

1

如果您有相關的用戶和產品模型 - 這個代碼@products = current_user.products將返回current_user產品。

1

要查找當前用戶的所有的產品,這將這樣的伎倆

current_user.products