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

时间:2011-12-04 23:48:17

标签: ruby-on-rails ruby ruby-on-rails-3

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

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

  1. 所需的迭代次数(X)
  2. 用户名长度(Y)
  3. 密码长度(Z)
  4. 然后,当我点击保存时,我需要应用程序创建X用户名和密码并保存到数据库。

    我已经设法通过在页面加载时调用操作来使其工作,但我不知道如何创建将传递变量的表单。

    我在我的用户模型中创建了这个:

    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
    

    在我的用户控制器中,我创建了一个新操作:

    def new_batch
      @user = User.new
      respond_to do |format|
        if @user.save      
          @user = User.generate_batch
        else
          format.html { render action: "new_batch" }
          format.json { render json: @user.errors, status: :unprocessable_entity }
        end
      end
    end
    

    在我的路线中:

    get "/batch" => "users#new_batch"
    

    我从一个空白表单开始,看看我是否至少可以使用硬编码的变量:

    = simple_form_for @user do |f|
      = f.submit
    

    当我点击提交时,看起来它试图使用我的创建操作,而不是生成批处理...

    我需要做什么:

    1. 获取正确提交的表单
    2. 按上述方式输入变量
    3. 提前致谢

      - 更新 -

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

      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
      

      现在,当我点击提交时,它会循环处理:)

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

1 个答案:

答案 0 :(得分:0)

你应该创建2个控制器。一个打电话来获取表格,一个发布/获取您的行动。 这与常规控制器New / Edit和Create / Update相同。

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

= form_for(@user, :method => :put, :url => url_for({:controller => :users, :action => :new_batch)) do |f|
  = f.submit 'Submit', {:class => 'btn'}

否则只需使用_tag助手

创建自己的表单
= form_tag("/batch"", :method => :get) do |f|
  = submit_tag 'Submit', {:class => 'btn'}