【问题标题】:Rails Simple_form and Select2 with tags带有标签的 Rails Simple_form 和 Select2
【发布时间】:2013-12-31 18:48:19
【问题描述】:

我有一个属于“Subgroup2”的“RootProduct”和 has_and_belongs_to_many 的“Measure”,以及其他关系。我正在使用 jQuery-select2 和 Simple_form 来构建表单。它适用于简单的关联,但我无法管理它与多个标记一起使用。这是我的模型:

class RootProduct < ActiveRecord::Base

  attr_accessible :name, :subgroup2_id, :measure_ids
  has_many :market_products
  belongs_to :subgroup2
  validates_presence_of :name
  validates_uniqueness_of :name
  validates_presence_of :subgroup2
  validates_presence_of :measure_ids
  has_many :favorite_products
  has_many :users, :through => :favorite_products
  has_many :generic_market_produc_images, :dependent => :destroy, :class_name => 'GenericMarketProductImage'
  has_and_belongs_to_many :measures

end

这是我的表格,

<body>
  <%= simple_form_for(@root_product) do |f| %>
    <%= f.error_notification %>
    <%= f.input :subgroup2_id, label: false %><br />
    <%= f.input :measure_ids, label: false, multiple: 'multiple' %><br />
    <%= f.input :name, label: false %><br />
    <div class="form-actions">
      <%= f.button :submit %>
    </div>

  <% end %>
</body>

这是我的 select2 脚本,

$("#root_product_measure_ids").select2({
        width: "500px",
        placeholder: "Choose measures",
        tokenSeparators: [",", " "],
        multiple: true,
        ajax: {
          url: '/measures',
          dataType: "json",
          data: function(term, page) {
            return {
              q: term
            };
          },
          results: function(data, page) {
            return {
              results: data
            };
          }
        },
        initSelection: function(element, callback) {
            console.log("entrou 2");
            //console.log(element.val());
            var data = [];
            $(element.val().replace('[', '').replace(']', '').replace(/ /g,'').split(",")).each(function(i) {
                //console.log(this);
                $.ajax("/measures/"+this+".json", {
                dataType: "json"
                }).done(function(measure) {
                  data.push({
                    id: measure.id,
                    name: measure.name
                  });
                  callback(data);
                });
            }); 
        },
        formatResult: FormatResult,
        formatSelection: FormatSelection,
        dropdownCssClass: "bigdrop", // apply css that makes the dropdown taller
        escapeMarkup: function (m) { return m; },
        allowClear: true
      })
      .on("selected", function(e) { 
        MeasureSelected();
        })
      .on("removed", function(e) { 
        MeasureRemoved();
        })
      ;
    })

您可以从我的控制台日志中看到,当启动新的“RootProduct”的 POST 时,带有 measure_ids 的数组是空的,后面是应该进入数组的度量的 id。

我在这里遗漏了一些东西。我尝试使用 simple_form 和 select2 调整很多选项,但没有成功。任何建议都会非常有帮助。

【问题讨论】:

  • 您解决了吗?对那些追随你的人有什么见解吗?

标签: ruby-on-rails jquery-select2


【解决方案1】:

我以前遇到过这种情况。这是我的解决方案:

在 root_product.rb 中,添加以下内容:

class RootProduct < ActiveRecord::Base
  attr_accessible :ac_measure_ids
  attr_accessor :ac_measure_ids

  before_save :set_measures

  private

  def set_measures
    self.measure_ids = @ac_measure_ids.split(',')
  end

  def ac_measure_ids
    self.measure_ids.blank? ? "" : self.measure_ids.join(',')
  end

end

在表格中,替换

<%= f.input :measure_ids, label: false, multiple: 'multiple' %>

 <%= f.input :ac_measure_ids, label: false, multiple: 'multiple' %>

【讨论】:

  • 你不需要 before_save 钩子和 attr_accessor。像这样定义设置器:``` def ac_measure_ids=(val) self.measure_ids = val.split(',') end ```
猜你喜欢
  • 2023-03-03
  • 1970-01-01
  • 2014-05-01
  • 2015-03-01
  • 2023-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多