Рельсы Сильные Параметры Фильтрации


В моей рельсы контроллер с сильным параметров, у меня есть типичный my_model_params частная функцию, чтобы отфильтровать какие-либо "страшные сети параметры". Один из параметров представляет собой список из Select2 форма входа. Это Select2 форма входной сигнал всегда проходит пустое или нулевое значение в качестве первого элемента, как ["", "23", "32"]. Я могу легко его убрать в my_model_params сняв его с reject функции такой: .reject! { |c| c.empty? }

Поскольку существует несколько полей, я в конечном итоге с целой функции выглядит примерно так:

  # Never trust parameters from the scary internet, only allow the white list through.
  def my_model_params
    filtered_params = params.require(:my_model)
        .permit(:name, :description, :status,
                :start_date, :end_date,
                geo_graphics: [], geo_media_types: [],
                geo_counties: [], geo_states: [])

     filtered_params[:geo_states].reject! { |c| c.empty? }
     filtered_params[:geo_counties].reject! { |c| c.empty? }
     filtered_params
  end

Это выглядит раздутым и уродливым. Как я могу очистить это, чтобы выглядеть лучше, или есть другой способ, чтобы отбросить пустые строки в массиве? Похоже, что это может выглядеть лучше, если бы он был прикован или как-то фильтр после permit функция

Редактировать:

Вот код, вид. Его использовать simple_form select2 камень. Я использовал только select2 JS библиотеку, хотя я не мог сделать библиотеке, чтобы загрузить без пустой записи для загрузки как элемент в select2 ввода. Она будет загружать как пустой ящик, который имеет смысл, так как представленные формы стоимости "".

<%= simple_form_for([@account, @request_for_proposal]) do |f| %>
  <%= f.error_notification %>

  <div class="form-inputs">
    <%= f.input :name %>
    <%= f.input :description %>
    <%= f.input :status, collection: RequestForProposal.statuses.keys %>
    <%= f.input :start_date %>
    <%= f.input :end_date %>

    <%= f.association :campaign, collection: @account.campaigns %>
    <%= f.association :user, as: :hidden %>
    <%= f.association :account, as: :hidden %>


    <%= f.input :geo_counties, as: :select2,  collection: [], include_blank: false,  multiple: true %>
    <%= f.input :geo_states, as: :select2,  collection: [], include_blank: false,  multiple: true %>

  </div>

  <div class="form-actions">
    <%= f.button :submit %>
  </div>
<% end %>


<script>

  $('#request_for_proposal_geo_counties').select2({
    theme: "bootstrap",
    cache: true,
    multiple: true,
    closeOnSelect: false,
    placeholder: {
      id: '-1', // the value of the option
      text: 'Select an option'
    },
    ajax: {
      url: '/api/v1/counties.json',
      dataType: 'json'
    }
  });

  var selected_states = <%= raw @request_for_proposal.geo_path_states.to_json %>;
  var keys = [ "id", "text", "zip_codes", "counties","population_0", "population_5", "population_18", "population_21"];

  $('#request_for_proposal_geo_states').select2({
    theme: "bootstrap",
    placeholder: {
      id: '-1', // the value of the option
      text: 'Select an option'
    },
    multiple: true,
    ajax: {
      url: '/api/v1/states.json',
      processResults: function (data) {
        // Tranforms the top-level key of the response object from 'items' to 'results'
        $.each(data.rows ,function(pos,obj){
          var counter = 0;
          $.each(obj,function(key,value){
            data.rows [pos][keys[counter]] = value;
            delete data.rows [pos][key];
            counter++;
          })
        })
        return {
          results: data.rows
        };
      }
    }

  });

</script>


477
-1
задан 9 февраля 2018 в 06:02 Источник Поделиться
Комментарии