0

当我创建一个skid时,我试图获取用户输入的值,以便我可以多次创建该记录。

在 _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

由于某种原因,计数变量没有获取数字,如果我对其进行硬编码并将 3 放入其中,它将按预期创建记录 4 次,但是如果我尝试根据用户输入的内容获取数值,如上所示,它不起作用。它每次只创建 1 条记录。

我无法访问该参数是否有原因?

4

3 回答 3

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
于 2013-09-21T16:22:32.237 回答
0

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

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

我希望这可以帮助其他遇到同样问题的人。

于 2013-09-24T17:42:54.523 回答
0

我将扩展您的答案以解释原因。

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

params[:skid][:skid_count]也可以

如果你想:skid_count在 params 散列之外(为了不触发新版本的 rails 中的禁止属性,你可以通过使用number_field_tag(:skid_count) which 将它们提供给你的控制器来构建它params[:skid_count]

于 2013-09-24T17:52:59.790 回答