1

У меня есть модель Фрукты с 4 атрибутами :name, :characteristic1 ,:characteristic2,:characteristic3. В таблицах с фруктами :characteristic1 ,:characteristic2,:characteristic3 поля получат значения из 6 флажков (потому что я не хотел добавлять все 6 полей в таблицу фруктов) в том виде, в котором пользователю нужно будет выбрать только 3 из них. Как бы получить значения выбранных в флажках и вставлять их в :characteristic1 ,:characteristic2,:characteristic3, без подписи: поле имени, которое принимает ввод как текстовое поле? Я уверен, что это нужно сделать в контроллере, но я не знаю как. Заранее благодарю вас.Манипулировать значениями check_box перед сохранением формы

форма

 <%= form_for @fruit ,:url=>{:action =>"create"} do |f| %> 
     <%=f.text_field :name %> 

     <%=f.fields_for :characteristics do |c| %> 
     <!--Characteristics checkboxes --> 
     <%end%> 
     <%=f.submit "submit" %> 

ответ

1

Я бы сказать вам, чтобы создать 2 новые модели: Характеристика и FruitCharacteristic

Fruit будет иметь много характеристик корыто fruitCharacteristic

И читать эту апи страницу, чтобы найти что-то прохладное, чтобы решить проблему с формой

http://api.rubyonrails.org/classes/ActionView/Helpers/FormOptionsHelper.html

UPDATE: Это должно работать для многих ко многим

<ul> 
    <% Characteristic.all.each do |c| %> 
     <li><%= check_box_tag :characteristics_ids, c.id, @fruit.characteristics.include?(c), :name => 'fruit[characteristics_ids][]' %> 
     <%= label_tag :characteristics_ids, c.name %></li> 
    <% end %> 
</ul> 
+0

Я хотел избежать этого, я просто хотел что-то простое, если это возможно. – katie

+0

По-вашему, трудно гарантировать консистенцию, и, например, найти все фрукты с определенными характеристиками также будут трудными. –

+0

Я не хотел делать много для многих ассоциаций, потому что он становится слишком сложным. Обычная практика заключается в том, чтобы добавить 30 полей в таблицу базы данных? – katie

1

Так как вы хотите, чтобы ограничить пользователю выбрать только три категории, то лучше предоставить 3 выберите коробки/3 комплекта флажков вдоль линии чего-то вроде «характерного1», «характеристики2» и «характеристики3». Затем в контроллере вы можете просто получить доступ к значениям с помощью параметров [: fruit] [: character1] и т. Д.

Смежные вопросы