【问题标题】:Rails how to create select dropdown with double nested model?Rails 如何使用双嵌套模型创建选择下拉列表?
【发布时间】:2016-01-19 04:58:57
【问题描述】:

我是 Rails 新手,我正在尝试为菜单项创建一个选择下拉菜单。复杂的部分是每个餐厅都有许多类别,其中包含许多菜单项。我的目标是有一个打印如下内容的下拉列表:

<optgroup label="Category 1">
  <option value="menu_item 1">Menu Item 1</option>
  <option value="menu_item 2">Menu Item 2</option>
  <option value="menu_item 3">Menu Item 3</option>
</optgroup>
<optgroup label="Category 2">
  <option value="menu_item 1">Menu Item 1</option>
  <option value="menu_item 2">Menu Item 2</option>
  <option value="menu_item 3">Menu Item 3</option>
  <option value="menu_item 4">Menu Item 4</option>
</optgroup>

这是我的模型

class Category < ActiveRecord::Base
  belongs_to  :restaurant
  has_many :menus, dependent: :destroy
end

class Restaurant < ActiveRecord::Base
  has_many :meals, dependent: :destroy
  accepts_nested_attributes_for :meals
  has_many :categories, dependent: :destroy
end

class Menu < ActiveRecord::Base
  belongs_to  :category
end

在我添加到 Category 模型之前,我有以下内容来创建我的 Meal 对象:

<%= form_for [@customer,@meal] do |f| %>
 <%=f.collection_select(:food_item,restaurant.menus.all, :name, :name) %>
 <%= f.hidden_field :restaurant_id, value: restaurant.id %>
 <%= f.submit "Submit meal"%>
<%end%>

我试图找出一种方法来做类似于 Grouped Select in Rails 的事情,但我不确定所涉及的额外模型到底如何。如果我需要包含任何其他信息,请告诉我,并提前感谢您的帮助!

【问题讨论】:

  • 试试改成&lt;%=f.grouped_collection_select(:food_item, Category.all, restaurant.menus.all, :name, :id, :name) %&gt;
  • @Pavan 感谢您的快速回复!我认为您已经很接近了,但是菜单嵌套在每个类别中,而不是餐厅了。因此,它必须是 category.menus.all 之类的,而不是 restaurant.menus.all,但我不确定如何确保对 Category 的每个实例都这样做
  • 好的。试试这个&lt;%=f.grouped_collection_select(:food_item, Category.all, Category.all.collect {|c| [ c.menus ] }, :name, :id, :name) %&gt;
  • @Pavan 这让我非常接近,但导致此错误[#&lt;ActiveRecord::Associations::CollectionProxy [#&lt;Menu id: 36, name: "Mushroom Pizza", meal_type: nil, details: "Locally grown mushrooms", restaurant_id: 18, category_id: 5&gt;]&gt;]] is not a symbol nor a string 我认为那是因为它是 c.menus 和 c.menus.name?

标签: ruby-on-rails ruby forms


【解决方案1】:

得到了帮助,并且能够让它工作!

<%= f.grouped_collection_select(:food_item, restaurant.categories, :menus,    :name, :name, :name) %>

来源:http://apidock.com/rails/v4.2.1/ActionView/Helpers/FormOptionsHelper/grouped_collection_select

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-14
    • 2021-04-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多