将值从输入文本字段传递到控制器

时间:2013-09-21 16:04:33

标签: ruby-on-rails

当我创建滑动时,我正在尝试获取用户输入的值,以便我可以多次创建该记录。

_form.html.erb中的

是我所有代码所在的位置。在new.html.erb中我用以下方式调用表单:

<%= render 'form' %>

以下是我尝试访问的表单代码:

  <%= f.label :skid_count %>
  <%= f.number_field :skid_count, :value => '1', :required => 'required', :pattern => ValidationValues.c_integer, :placeholder => ValidationValues.p_integer %>

在控制器中我试图这样做:

    def create
    @skid = Skid.new(params[:skid])

    count = params[:skid_count].to_i

    # Create record in the database, and return an appropriate message
    respond_to do |format|
      if @skid.save
        for i in 1..count
          Skid.new(params[:skid]).save
        end

        format.html { redirect_to @skid, notice: 'Skid was successfully created.' }
        format.json { render json: @skid, status: :created, location: @skid }
      else
        format.html { render action: "new" }
        format.json { render json: @skid.errors, status: :unprocessable_entity }
      end
    end
  end

由于某种原因,count变量没有提取数字,如果我硬编码并将3放在那里,它会按预期创建4次记录,但是如果我尝试根据什么得到数值用户输入,如上所示,它不起作用。它每次只创建1条记录。

我无法访问该参数吗?

3 个答案:

答案 0 :(得分:0)

看起来您在记录保存之前设置变量,因此没有记录可以在该点设置变量。如果你将线向下移动几个空格,它应该可以工作。

def create
  @skid = Skid.new(params[:skid])

  # Create record in the database, and return an appropriate message
  respond_to do |format|
  if @skid.save
    count = params[:skid_count].to_i    # if the record saves, create variable with the new params
    for i in 1..count                   # do your magic
      Skid.new(params[:skid]).save
    end

答案 1 :(得分:0)

我通过以这种方式从属性中获取值来解决这个问题:

count = params[:skid]["skid_count"]

我希望这有助于其他人偶然发现同样的问题。

答案 2 :(得分:0)

我会扩展你的答案来解释原因。

当您通过form_for帮助程序构建字段时,它会自动将其范围限定在param哈希中的模型属性下。

params[:skid][:skid_count]也可以正常使用

如果你希望:skid_count在params散列之外(为了不在较新版本的rails中触发禁用属性,你可以只使用number_field_tag(:skid_count)来构建它,它们可用于您的控制器为params[:skid_count]