asmselect / bsmselect с Ruby on Rails - сохранить выбранные элементы в действии "Создать"

Я включил плагин bsmSelect в свое приложение на Ruby on Rails, и у меня возникли проблемы с сохранением выбранных настроек. Я реализовал bsmSelect до такой степени, что я могу определить все поля данных в моем выделении, я могу добавить их в список, удалить их и т. Д. (Пример см. Здесь - у меня в основном реализован "Пример 1": bsmSelect демо)

У меня проблемы с привязкой кнопки "Отправить" к действию "Создать" в Ruby on Rails. Я хочу взять выбранные элементы, нажать кнопку "Отправить", а затем создать новый элемент только с теми полями, которые я выбрал для сохранения. Я определил ресурс как RESTful, и я определил методы create, new и show в моем контроллере.

Пожалуйста, помогите мне выполнить действие "создать", которое будет отображать только те поля данных в той модели, которую я выбрал с помощью bsmSelect. Фрагменты кода ниже:

просмотров /application_templates/new.html.erb

<%= form_for(@apptemplate) do |f| %>
 <%= render 'test', f: f %>
 <%= f.submit "do it", class: "btn btn-large btn-primary" %>
<% end %>

"тест" частичный

<select name="Fields" multiple="multiple" title="Please select parameters">
 <option><%= f.label :name %></option>
 <option><%= f.label :email %></option>
 <option><%= f.label :dob %></option>
</select>

контроллер

def show
@apptemplate=ApplicationTemplate.find(params[:id])
end


def new
 @apptemplate=ApplicationTemplate.new
 respond_to do |format|
     format.html 
     format.js
 end
end

def create #create a new property
@apptemplate= ApplicationTemplate.new
if @apptemplate.save
    flash[:success] = "Template saved!"
    redirect_to @apptemplate
else 
    render 'new'
end
end

Примечание: примеры полей (name, email, dob), конечно, определены в моей модели

Итак, предполагая, что я выбрал только "имя и DOB", как я мог создать новый шаблон AppTemplate, который бы показывал, что "Имя и DOB" были сохранены с помощью bsmSelect?

Спасибо!!

1 ответ

Решение

В вашей тестовой части вы должны поместить это:

<select id="fields" name="fields[]" multiple="multiple" title="Please select parameters">

Это создаст параметры [:fields], к которым вы можете получить доступ в методе create. Учитывая, что в вашей модели есть поля name, email и dob, вы можете сделать что-то вроде этого:

def create
  @template = Template.new
  params[:fields].each do |field|
    @template[field.downcase] = true
  end
  if @template.save
    redirect_to template_path(@template)
  else
    render 'new'
  end
end

Обратите внимание на "field.downcase". Это потому что

<option><%= f.label :name %></option>

генерирует это в представлении

<option>Email</option>
Другие вопросы по тегам