Динамические вложенные элементы формы, основанные на вводе начального номера - PullRequest
1 голос
/ 18 января 2011

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

  1. На первой странице запрашивается количество образцов в партии. Пользователь вводит номер и отправляет хиты.
  2. Формируется форма, в которой пользователь может ввести информацию о партии (дата выборки, название эксперимента, материал модели партии). Под полями пакета должно быть столько полей для отдельных идентификаторов образцов, сколько указано пользователем на первом шаге.
  3. Пользователь заполняет все это, и партия и ее образцы создаются после отправки.

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

Ответы [ 2 ]

2 голосов
/ 18 января 2011

Нет необходимости возвращать форму с моделью. На ваш взгляд, вы просто захотите что-то вроде этого примера (в Haml):

- form_tag new_batch_path, :method => "get" do
  = label_tag(:sample_count, "Number of samples:")
  = text_field_tag(:sample_count, 3)
  = submit_tag("Get Started!")

А затем в вашем контроллере и в представлении new_batch вы можете просто сослаться на params[:sample_count]

- (params[:sample_count] || 5).to_i.times do |n| ...

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

@sample_count = params[:sample_count].to_i
unless (1..10).include? @sample_count
  flash[:error] = "A batch must contain between 1 and 10 samples."
  redirect_to root_url
end

Обратите внимание, что nil.to_i, "".to_i и мусор, такой как "ajsdgsd".to_i, все равны 0, поэтому, если вы не хотите, чтобы люди могли указывать 0 образцов, этот код достаточно надежен

0 голосов
/ 18 января 2011

Посмотрите на эти серии Railscasts:

Скринкасты «Форма вложенной модели» более новые, так что я пойдус этими первыми.

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