как использовать массив в form_for? - PullRequest
0 голосов
/ 18 февраля 2010

У меня есть пользовательская модель, которая содержит поле, скажем, text1. В форме пользователи / новая я хочу иметь 4 отдельных текстовых поля для этого текста1. В моей модели я возьму значения из этих блоков и объединю их вместе как значения, разделенные запятыми, и сохраню их в БД. Чтобы дать вам понимание, это то, что я хочу.

<input type="text" name="user[text1][]" />
<input type="text" name="user[text1][]" />
<input type="text" name="user[text1][]" />
<input type="text" name="user[text1][]" />

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

Ответы [ 3 ]

1 голос
/ 18 февраля 2010

Добавьте несколько виртуальных атрибутов к вашей User модели

class User < ActiveRecord::Base
  attr_accessor :text1_part1  
  attr_accessor :text1_part2  
  attr_accessor :text1_part3  
  attr_accessor :text1_part4

  def before_validation
      self.text1 = "#{self.text1_part1}#{self.text1_part2}#{self.text1_part3}#{self.text1_part4}"
  end
  # make sure you fill the correct values for
  # the text parts for an existing record.
  # This can be done by implementing `after_find` or overriding
  # `text1=`.
end  

В вашем представлении кода используйте новые атрибуты вместо text1

<% form_for(:user) do |f| %>
   #some code
   <%= f.text_field :text1_part1>
   <%= f.text_field :text1_part2>
   <%= f.text_field :text1_part3>
   <%= f.text_field :text1_part4>
   #some code
   <%= f.submit "Save">
<% end %>
0 голосов
/ 03 сентября 2010

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

0 голосов
/ 18 февраля 2010

Предыдущий ответ дает решение, поэтому я просто предоставляю некоторые сведения о том, почему то, что вы просите, не работает так, как вы могли бы надеяться.

Вы действительно можете создать форму с несколькими полями ввода с одинаковым именем, и эти данные будут опубликованы. Однако, когда rails получает сообщение, оно автоматически параметризует данные сообщения и / или параметры URL. Он по существу разделяется на & и назначает пары ключ / значение хэшу params. В результате этого params [: user] [: text1] (из вашего примера) будет иметь значение последнего экземпляра пользователя [text1], с которым он столкнулся, поскольку это просто присваивание значения существующему ключу. Возможно, вы захотите покопаться в многопараметрических присвоениях ActiveRecord, чтобы получить представление о том, как работают атрибуты datetime, поскольку они похожи на ваш вариант использования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...