Ruby on rails 如何将ruby迭代移动到Rails3中的控制器/模型中

Ruby on rails 如何将ruby迭代移动到Rails3中的控制器/模型中,ruby-on-rails,ruby,ruby-on-rails-3,Ruby On Rails,Ruby,Ruby On Rails 3,我已经创建了一个基本用户名/密码生成器,它可以创建X个随机用户名和密码。我用post作为基础。它在控制台中工作正常,但我不知道如何让它在我的RoR3.1应用程序中正常工作 我需要创建一个简单的表单,可以输入以下变量: 所需的迭代次数X 用户名Y的长度 密码长度Z 然后,当我单击save时,我需要应用程序创建X个用户名和密码并保存到db 通过在页面加载时调用操作,我成功地使其工作,但我不知道如何创建一个传递变量的表单 我在我的用户模型中创建了以下内容: class User < Active

我已经创建了一个基本用户名/密码生成器,它可以创建X个随机用户名和密码。我用post作为基础。它在控制台中工作正常,但我不知道如何让它在我的RoR3.1应用程序中正常工作

我需要创建一个简单的表单,可以输入以下变量:

所需的迭代次数X 用户名Y的长度 密码长度Z 然后,当我单击save时,我需要应用程序创建X个用户名和密码并保存到db

通过在页面加载时调用操作,我成功地使其工作,但我不知道如何创建一个传递变量的表单

我在我的用户模型中创建了以下内容:

class User < ActiveRecord::Base
  private

  def self.generate_batch
    10.times do
     username = ""
     password =""
     5.times { username << (i = Kernel.rand(62); i += ((i < 10) ? 48 : ((i < 36) ? 55 : 61 ))).chr }
     5.times { password << (i = Kernel.rand(62); i += ((i < 10) ? 48 : ((i < 36) ? 55 : 61 ))).chr }
     User.create!(:username => username, :check_attributes => [ {:attribute_name => "User-Password", :value => password, :op => ":="}])
    end
  end      
end
在我的路线中:

get "/batch" => "users#new_batch"
我从一个空白表单开始,看看是否至少可以使用硬编码的变量:

= simple_form_for @user do |f|
  = f.submit
当我点击提交时,它似乎试图使用我的创建操作,而不是生成批处理

我需要做什么才能:

让表单正确提交 输入上述变量 提前谢谢

-更新-

按照下面的建议,我创建了两个控制器:

routes.rb现在有以下功能:

  get "/batch" => 'users#new_batch'
  put "/batch" => 'users#new_batch_create'
控制器如下所示:

  def new_batch
  end

  def new_batch_create
     @user = User.generate_batch 
  end
现在,当我点击submit时,它通过循环进行处理:


仍然不太明白如何从表单传递变量…

您应该创建两个控制器。一个打电话获取表单,另一个发布/获取您的操作。 这与常规控制器相同,即新建/编辑和创建/更新

如果视图中有用于创建字段的对象,请使用下面的表单

= form_for(@user, :method => :put, :url => url_for({:controller => :users, :action => :new_batch)) do |f|
  = f.submit 'Submit', {:class => 'btn'}
否则,只需使用标记帮助器创建自己的表单即可


控制器的逻辑已关闭。您需要将表单的生成和表单的处理分开。这很有意义,谢谢。如何将变量发送到循环?扫描似乎无法使其工作,认为我的路线有问题。你能看一下吗?更新了我的问题SOk,设法解决了它。仍然不确定是否要传递变量?您可以简单地将它们添加到表单中。它们将被附加到get的url中,并附加到post的标题中。如果构建模型,我建议您查看一下rails生成的标准页面。
= form_for(@user, :method => :put, :url => url_for({:controller => :users, :action => :new_batch)) do |f|
  = f.submit 'Submit', {:class => 'btn'}
= form_tag("/batch"", :method => :get) do |f|
  = submit_tag 'Submit', {:class => 'btn'}