Rails: использование текстового поля для: отношения has_many

#ruby-on-rails #ruby #textarea #has-many

#ruby-on-rails #ruby #текстовое поле #имеет-много

Вопрос:

Привет, ребята, первый вопрос здесь.

У меня есть пара продуктов и пользователи, которые могут добавлять эти продукты в списки желаний. У пользователя может быть много списков желаний (для разных целей). Продукты можно добавлять в списки желаний, но при этом требуется дополнительная информация: вы должны указать количество определенного продукта. Эта логика используется при включении, которое имеет количество полей.

   Class Wishlist
    belongs_to :user # User class is irrelevant here
    has_many :inclusions
    has_many :products, :through => :inclusions
  end

  Class Product
    has_many :inclusions
    has_many :wishlists, :through => :inclusions
  end

  Class Inclusion
    belongs_to :product
    belongs_to :wishlist
  end
  

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

 <textarea>
    1 Bicycle
    4 Shoe
    1 Telephone
</textarea>
  

Когда форма отправлена, вся логика должна решаться за кулисами. Таким образом, если «1 телефон» отключен, включение должно быть уничтожено. Если строка добавлена или изменена, соответствующее включение должно быть создано или обновлено, чтобы база данных синхронизировалась с содержимым этой текстовой области.

Я искал высоко и низко, но не смог найти решение для этого. Заранее спасибо!

Ответ №1:

Это плохая идея, но ради того, чтобы вы могли учиться на своих собственных ошибках…

  1. Оберните свой метод установки атрибута textarea-data, чтобы включить функциональность в…
  2. Проанализируйте соответствующую информацию из каждой строки в текстовой области и…
  3. Вызовите исходный метод установки для каждого.
  4. Сделайте обратное для средства получения.

Ваши проверки, ассоциации и т.д. все по-прежнему работает, и ваша логика для обработки этого аккуратно упакована, так что вы можете легко выбросить ее позже, если / когда у вас возникнут проблемы.