簡體   English   中英

將值從輸入文本字段傳遞到控制器

[英]Passing a value from input text field to controller

創建滑行時,我試圖獲取用戶輸入的值,以便可以多次創建該記錄。

我的所有代碼都放在_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條記錄。

我為什么無法訪問該參數?

看起來您是在保存記錄之前設置了變量,因此沒有記錄可用於設置變量。 如果將行向下移動幾個空格,它應該可以工作。

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

我已經通過以這種方式從屬性獲取值來解決了這個問題:

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

我希望這可以幫助其他偶然發現相同問題的人。

我將在您的回答中進一步說明原因。

通過form_for幫助器構建字段時,它會自動將其范圍限定在param哈希中的模型屬性下。

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

如果您希望:skid_count在params哈希值之外(以免在較新版本的rails中觸發禁止的屬性,則可以通過使用number_field_tag(:skid_count)來構建它,這將使它們作為params[:skid_count]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM