[英]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.