限制:在我的rails应用程序中的表单上可以访问关联结果

时间:2013-08-20 19:13:46

标签: ruby-on-rails

我正在创建一个非常基本的电子商务应用程序来教我自己的轨道并且我遇到了我的第一个障碍:

我创建了一些协会,以便商家可以为他们发布的产品分配类别,并且按照我的方式工作得很好,但是,现在的工作方式,当商家创建新产品的所有类别时类别表可供选择。假设,如果我想将该列表仅限于特定商家创建或关联的类别,我假设从categories_merchants表中获取,我将如何进行此操作?

我已经展示了相关的表格和下面的表格,以显示我所做的但是遗漏了模型,但我在其中有所有适当的关联:

产品表:

create_table :products do |t|
  t.integer :merchant_id
  t.string :title
  t.text :body
  t.date :publish_date
  t.date :expiry_date
  t.timestamps

分类表:

create_table :categories do |t|
  t.string :name
  t.timestamps

Categories_Products表:

create_table :categories_products, :id =>false do |t|
  t.integer :category_id
  t.integer :product_id
end
add_index :categories_products, [:category_id, :product_id]

Categories_Merchants表:

create_table :categories_merchants, :id =>false do |t|
  t.integer :category_id
  t.integer :merchant_id
end
add_index :categories_merchants, [:category_id, :merchant_id]

新产品形式:

<%= simple_form_for(@product) do |f| %>
  <div class="form-inputs">
    <%= f.input :title %>
    <%= f.input :body %>
    <%= f.association :categories, :as => :collection_select %>
    <%= f.input :publish_date %>
  </div>
<% end %>

提前致谢;)

1 个答案:

答案 0 :(得分:0)

你可以这样做:

<%= f.association :categories, 
                  :as => :collection_select, 
                  :collection => Category.includes(:categories_merchants).where("categories_merchants.merchant_id = ?", merchant_id) %>