如何允许用户将记录添加到另一条记录

时间:2018-08-10 18:13:52

标签: ruby-on-rails ruby

我正在使用的Ruby on Rails应用程序需要帮助。

我有两个模型(和两个控制器),商店(带有商店控制器)和配料(带有配料控制器)。

这两个模型是通过HABTM(具有“很多”和“属于”)关联的,如下所示:

class Store < ApplicationRecord
    validates :name, presence: true, length: { maximum: 50 }, uniqueness: { case_sensitive: false }
    has_and_belongs_to_many :ingredients
end

并且:

class Ingredient < ApplicationRecord
    validates :name, presence: true, length: { maximum: 50 }, uniqueness: { case_sensitive: false }
    has_and_belongs_to_many :stores
end

我已经设置了控制器,以便用户可以添加,删除和编辑商店和配料。但我也希望能够在配料的编辑页面上将商店添加到配料中。

我想在视图中通过使文本字段支持诸如Selectize.js之类的标记之类的界面来完成此操作。然后,用户可以在此文本字段中输入商店。

是否可以在提交表单时以某种方式将添加到配料的商店列表传递给配料控制器的更新操作?我正在尝试找出执行此操作的“路线”。

谢谢

编辑-当前编辑表单

这是我当前的配料编辑页面编辑表单:

<% provide :title, "Edit Ingredient" %>
<% provide :button_text, "Update Ingredient" %>
<%= render 'form' %>

和_form.html.erb

<%= bootstrap_form_for @ingredient do |f| %>
  <%= f.text_field :name %>
  <%= f.text_area :description, { 'data-gramm_editor' => false } %>
  <%= f.submit(content_for?(:button_text) ? yield(:button_text) : "Submit", class: %w[btn btn-primary]) %>
  <%= link_to "Cancel", ingredients_url, class: %w[btn btn-danger] %>
<% end %>

如您所见,我还没有从配料编辑页面添加添加商店的功能。

2 个答案:

答案 0 :(得分:0)

似乎您需要select tag助手。您将使用options_from_collection_for_select提供选项。如果希望将其选择为多选,则需要元素名称以[]结尾,以便将其作为数组发送到控制器。

答案 1 :(得分:0)

尝试了许多个不同的选项(包括selectize.js,selected,bootstrap-multiselect)之后,我最终使用了一个名为select2的工具来解决了这个问题。

基本上,我使用simple_form gem创建了一个关联,然后通过select2将其转换为“药盒”。感谢@Michael的帮助。