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>