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