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