基于输入起始编号的动态嵌套表单元素

时间:2011-01-17 22:32:52

标签: ruby-on-rails

和其他许多人一样,我是Rails的新手并且有一个问题。我正在为一个小型分析实验室开发样品跟踪器。我希望用户提交包含许多样本的批次。我希望首页成为批量提交的简单网关。我的总体计划是:

  1. 首页要求批量处理样品数量。用户输入号码并点击提交。
  2. 生成一个表单,用户可以在其中输入批处理信息(采样日期,实验名称,批处理模型)。在批处理字段下,应该有与用户在第一步中指示的单个样本ID一样多的字段。
  3. 用户填写所有这些内容,批次及其样本在提交时创建。
  4. 我的感觉是主页应该将某种参数传递给批处理控制器,批处理控制器然后迭代地构建样本,而模型具有迭代地为视图构建表单元素的方法。这个想法是否正确?我怎样才能传递与任何模型或控制器没有直接关系的参数?我可以找到任何类似的问题,但是如果有人可以将我链接到解决类似问题的解决方案或Railscast,我会非常感激!

2 个答案:

答案 0 :(得分:2)

无需使用模型支持表单。对于你的观点,你只需要这样的例子(在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个样本,否则此代码相当强大

答案 1 :(得分:0)

看看这些Railscasts系列:

“嵌套模型表格”的截屏视频是较新的,所以我首先考虑这些。