我正在使用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个字段。
有没有办法做到这一点,或者只是添加一个链接...任何想法
答案 0 :(得分:1)
肯定有不止一种方法可以做到这一点。这是一个。
在新操作中预先构建了25个法院并将其包含在新页面中但不显示它们(显示:无)。在客户端,当用户输入/选择法院数量时,您将显示这些法院输入字段的数量。你需要非常简单的javascript。在rais控制器端,您可以忽略超出用户选择的法院数量的所有法院字段
在你的参数中,球场将以阵列形式出现。使用切片!摆脱额外的法庭。
params[:tournament][:courts].slice!(0..params[:tournament][:number_courts].to_i)