2012-10-03 31 views
8

tôi có mô hình sau đây trong ứng dụng đường rayRails mệnh đề where trên hai bảng

category => company => store 

cửa hàng có một công ty belongs_to và công ty có mối quan hệ belongs_to loại. bây giờ tôi muốn sử dụng một phương pháp ở đâu trên một đối tượng cửa hàng để truy xuất tất cả các cửa hàng trong cùng một danh mục.

Tôi muốn có một cái gì đó như thế này

@stores.nearbys(5).where("stores.company.category_id = xxx") 

ai đó có thể cho tôi một lời khuyên về vấn đề này

+0

@simone nhờ để làm nổi bật mã !!! – Martin

Trả lời

17

Hãy thử tham gia với nơi trên bàn tham gia:

@stores.nearbys(5).joins(:company).where("companies.category_id = xxx") 

EDIT:

Để có được loại một cửa hàng bạn trước tiên sẽ phải ủy quyền phương thức danh mục cho công ty của mình:

class Store < ActiveRecord::Base 
belongs_to :company 

delegate :category, :to => :company 
end 

Bây giờ chỉ cần gọi phương thức trong truy vấn của bạn:

@stores.nearbys(5).joins(:company).where("companies.category_id = ?", self.company.id) 
+0

tuyệt vời! chỉ một câu hỏi nữa thôi. làm thế nào tôi có thể thay thế các xxx với các thể loại thực tế của cửa hàng, vì nó cũng chỉ có thể truy cập thông qua các công ty liên quan ?? – Martin

+0

Tôi đã chỉnh sửa câu trả lời của mình - hy vọng nó hữu ích hơn –

+0

cảm ơn. giải quyết vấn đề của tôi cùng với blog của simone. tất cả tốt nhất từ ​​áo – Martin

10

where hỗ trợ băm lồng nhau.

@stores.nearbys(5).where(:company => { :category_id => @category.id }, joins: company) 
+0

hi simone, với @ store.nearbys (5) .where (công ty: {category_id}, join: company) tôi nhận được lỗi sau - lỗi cú pháp, bất ngờ '}', mong đợi tASSOC .... where (company: { category_id}, join: company) – Martin

+0

Có thể bạn không sử dụng Ruby 1.9? Tôi đã cập nhật để sử dụng cú pháp cũ. –

+0

Rất tiếc, đã xảy ra lỗi. Tôi quên rằng 'category_id' phải có một giá trị, trong trường hợp này là' @ category.id' (hãy đảm bảo thích ứng với mã) –

-1

bạn có thể thử này

@category = Category.find xxx 

@store = @category.company.stores 
+0

thats không thực sự là một lựa chọn, vì tôi có một đối tượng lưu trữ hiện tại và tôi muốn có được tất cả các cửa hàng cùng loại ... – Martin

+0

chúng ta có thể có một mối quan hệ khác nếu có thể như trong cửa hàng is_to: category,: qua =>: công ty –

Các vấn đề liên quan