Доступ к идентификатору в ассоциации has_many - PullRequest
0 голосов
/ 01 февраля 2012

У меня есть 3 модели, пользователь, магазин и продукт . Отношения User has_many stores и Product has_many stores. В этом случае, если я делаю current_user.stores, я получаю массив магазинов, которые есть у конкретного пользователя. Но теперь я хочу вернуть магазины с определенными продуктами, где я мог бы получить доступ к product_id , что я мог бы сделать current_user.stores.where(:product_id=>1), но в моем случае дело в том, что я не могу получить доступ к product_id , поэтому каким другим способом я могу воспользоваться для достижения этой цели, возможно, has_many, scope , но я не не знаю как. Кто-нибудь может мне помочь, пожалуйста?

 def my_account
   #@product=Product.find(params[:id]) ,this cant find the id
   if user_signed_in?
     @my_stores=current_user.stores.where(:product_id=>@product.id)
   end
 end

вид

   <% @my_stores.each do |store| %>
   <%=store.name%>
   <%end%>

1 Ответ

0 голосов
/ 01 февраля 2012

(store, product) имеет отношение many-to-many между ними, поэтому вам, возможно, придется ввести промежуточную модель, как показано ниже:

class User < ActiveRecord::Base
  has_many :stores
end

class Store < ActiveRecord::Base
  belongs_to :user

  has_many :store_products
  has_many :products, :through => :store_products
end

class StoreProduct < ActiveRecord::Base
 belongs_to :store
 belongs_to :product
end

class Product < ActiveRecord::Base
  has_many :store_products
  has_many :stores, :through => :store_products
end

Теперь для данного пользователя вы можете получить магазины следующим образом:

user.stores # all stores associated with the user

Все магазины с данным товаром

user.stores.joins(:products).where("products.id = ?", 1234)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...