2013-05-12 17 views
0

Я пытаюсь создать небольшую систему учета. Здесь у меня есть некоторые продукты. Каждый месяц я хочу записать, сколько каждого продукта каждый пользователь купил.Несколько полей ввода для нескольких форм для нескольких пользователей

Допустим, у меня 3 пользователя и 4 продукта. Я хочу таблицу 3 на 4 со всеми именами пользователей слева и продуктами сверху. В каждом поле я хочу уметь записывать, сколько именно этого товара покупает пользователь.

Я пробовал следующее, однако поля не уникальны, поэтому отправляется только последний. Как мне продолжить?

= simple_form_for(:lines, url: lines_url) do |f| 
    - @users.each do |user| 
    tr 
     td= user.name 
     - @products.each do |product| 
     td 
      = f.fields_for user do |u| 
      = u.fields_for product do |p| 
       = p.fields_for Line.new do |l| 
       = l.text_field :quantity 

EDIT:

Я обнаружил, что это будет работать, howver, это скорее хак:

= simple_form_for(:lines, url: lines_url) do |f| 
    - @users.each do |user| 
    tr 
     td= user.name 
     - @products.each do |product| 
     td 
      = text_field :lines, "#{user.id}][#{product.id}" 

Обратите внимание на ][ в text_field.

ответ

1

Я имел эту проблему несколько раз и придумали это:

= simple_form_for(:lines, url: lines_url) do |f| 
    - @users.each_with_index do |user, index| 
    %tr 
     %td= user.name 
     - @products.each do |product| 
     %td 
      = f.fields_for user do |u| 
      = u.fields_for index do |u| 
       = u.fields_for product do |p| 
       = p.fields_for Line.new do |l| 
        = l.text_field :quantity 

fields_for index означает, что он выходит как lines[user][0][product][line] и т.д., что, как Rails обычно имеет дело с подачей нескольких объектов. Параметрами являются:

{ 
    "0" => some_data, 
    "1" => some_other_data 
} 

, который немного странный, но как он должен выглядеть. Кажется, я помню, что у меня были проблемы с использованием этой техники с таким количеством уровней гнездования, как у вас, но это должно помочь дать вам некоторые идеи.

+0

Действительно ли это правильное решение? Кажется немного странным, что мне нужно заботиться о самом индексе. –

+0

Я знаю, это действительно отстой, но я не смог найти ничего лучшего. Это не похоже на то, что Rails имеет дело с очень хорошо из коробки, так как это не совсем стандартная запись CRUD. – RobHeaton

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