开发者

Formtastic make the correct fields on the fly?

开发者 https://www.devze.com 2023-04-13 01:34 出处:网络
I am using Formtastic and also using the accepts_nested_attributes_for ..here are models class Tournament < ActiveRecord::Base

I am using Formtastic and also using the accepts_nested_attributes_for ..here are models

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

class Court < ActiveRecord::Base
  belongs_to :tournament

I need to have a form that one of the questions in the tournament form will determine how many courts i need to build. Here is my approach now

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

and in the view

<%= semantic_form_for @tournament do |f| %>
  &l开发者_如何学JAVAt;%= f.inputs do %>
    <%= f.input :number_courts, :hint => "How many courts are available?" %>
        <%= f.semantic_fields_for :courts do |ct| %>
          <%= ct.input :name %>
        <% end %>

the problem with this approach is that I will always prompt the user with 25 fields when really i need only the amount they enter from the question "How many courts are available?"

Is there a way to do this or just add them with a link ...any ideas


There are certainly more than one ways to do this. Here is one.

Have the 25 courts prebuilt in the new action and include them in the new page but do not display them (display:none). On the client side when the user enters/selects the number of courts then you display those number of court input fields. You will need very simple javascript for this. On the rais controller side you can ignore all the court fields that are beyond the number of courts selected by the user

In your params the court fields would come in an as array. Use slice! to get rid of the extra courts.

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

精彩评论

暂无评论...
验证码 换一张
取 消