Formtastic сделать правильные поля на лету? - PullRequest
1 голос
/ 16 октября 2011

Я использую Formtastic , а также использую accepts_nested_attributes_for .. есть модели

class Tournament < ActiveRecord::Base
  has_many  :courts, :dependent => :destroy
  accepts_nested_attributes_for :courts, :allow_destroy => true

class Court < ActiveRecord::Base
  belongs_to :tournament

Мне нужна форма, чтобы один из вопросов в форме турнира определил, сколько кортов мне нужно построить. Вот мой подход сейчас

def new
  @tournament = Tournament.new
  25.times do
    @tournament.courts.build
  end

и в представлении

<%= semantic_form_for @tournament do |f| %>
  <%= f.inputs do %>
    <%= f.input :number_courts, :hint => "How many courts are available?" %>
        <%= f.semantic_fields_for :courts do |ct| %>
          <%= ct.input :name %>
        <% end %>

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

Есть ли способ сделать это или просто добавить их со ссылкой ... любые идеи

1 Ответ

1 голос
/ 16 октября 2011

Конечно, есть несколько способов сделать это. Вот один.

Подготовьте 25 судов в новом действии и включите их в новую страницу, но не отображайте их (отображение: нет). На стороне клиента, когда пользователь вводит / выбирает количество судов, вы отображаете это количество полей ввода суда. Вам понадобится очень простой JavaScript для этого. На стороне контроллера rais вы можете игнорировать все поля судов, которые находятся за пределами числа судов, выбранных пользователем

В ваших параметрах поля суда будут представлены в виде массива as. Используйте ломтик! избавиться от лишних кортов.

params[:tournament][:courts].slice!(0..params[:tournament][:number_courts].to_i) 
...