簡體   English   中英

Rails 4-如何訪問參數

[英]Rails 4 - How to Access Params

我正在上傳發布以下參數的圖片:

Parameters: {"url"=>"https://bucket.s3.amazonaws.com/image014.jpg",
"filepath"=>"/uploads%2F1381509934146-1t5a44loikwhr529-1d68490743e05a1287fea45ed4ed9e59%2Fslide0005_image014.jpg",
"filename"=>"slide0005_image014.jpg", 
"filesize"=>"30807", 
 "filetype"=>"image/jpeg", 
 "unique_id"=>"1t5a44loikwhr529", 
 "choice"=>["https://bucket.s3.amazonaws.com/image014.jpg"]}

這是我的表格:

<%= s3_uploader_form callback_url: choices_url, callback_param: "choice[]", id: "s3-uploader" do %>
  <%= file_field_tag :file, multiple: true %>
   <button type="submit" class="btn btn-primary start"> 
<% end %>

在我的控制器中,我有:

#app/controllers/choices_controller

def create
@choice = Choice.create!(choice_params)
  if @choice.persisted?
    respond_to do |format|
      format.html { redirect_to choices_path }
      format.json { head :no_content }
    end
  end
end

def choice_params
  params.require(:choice).permit(:url, :filepath, :filename, :filesize, :filetype)
end

但是,它返回錯誤

 NoMethodError (undefined method `permit' for #<Array:0x007f903e380060>):
  app/controllers/choices_controller.rb:49:in `choice_params'
  app/controllers/choices_controller.rb:24:in `create'

你能告訴我我在做什么錯嗎? 我要做的就是:

1)將“ url”參數添加到DB 2)對“ filename”參數進行標題化,然后將其提交給DB。

非常感謝!

為什么呢?

require工作方式類似於params[:some_key] ,但是當返回的值為空時,它會引發ActionController::ParameterMissing

這很方便,因為在這種情況下,它允許使用rescue_from呈現400: bad request錯誤。

該怎么辦 ?

因此,您必須包裝參數,以便在調用require(:choice)時獲得哈希值。

不幸的是, s3_upload_form似乎不支持與form_for相同的構建器語法,這將允許您執行以下操作:

<%= form_for :s3_upload do |f| %>
    <% f.file_field :file %>
<% end %>

導致像這樣的params哈希:

 { s3_upload: {file: <SomeFile ...>} }

因此,我的建議只是刪除require調用,並將:choice和傳遞給permit的其他參數放在一起。

如果您仍然希望使用require方法的好處(即檢查是否缺少參數),則始終可以執行以下操作:

def choice_params
  params.permit(:foo, :bar, :baz).tap do |p| 
    p.each_key{ |k| p.require k }
  end
end

如果缺少任何允許的參數,則會引發異常。

暫無
暫無

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

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