簡體   English   中英

Rails 5使用強大的參數重定向

[英]Rails 5 redirect with strong parameters

控制器:

def foo
 redirect_to home_path(params: auth_params)
end

private
def auth_params
  params.require(:auth).permit(:name, :email, :photo_url, :provider, :provider_id)
end

以下是控制器出錯的參數:

參數:

{"utf8"=>"✓",
 "authenticity_token"=>"...",
 "auth"=>
  {"name"=>"...",
   "email"=>"...",
   "photo_url"=>"...",
   "provider"=>"...",
   "provider_id"=>"..."}
}

出現此錯誤: unable to convert unpermitted parameters to hash

我允許所有參數(除rails默認參數(即utf8,authenticity_token之外),為什么會彈出此錯誤?

編輯:

以下建議均不起作用:

redirect_to home_path(auth_params)
redirect_to home_path, params: auth_params

有關如何執行控制器操作的更多信息可能會有所幫助:

我(在同一控制器中)有一個在視圖中具有前往foo_path的form_tag的操作bar 我試過通過jQuery或提交按鈕提交表單,它不會改變結果。 一旦我點擊auth_params方法,我就會收到錯誤消息。

這意味着它在auth_params方法上auth_params而不是在重定向本身上auth_params

home_path和其他url_for相關方法期望使用Hash對象而不是ActionController::Parameters對象(這是控制器中的params方法返回的對象),因此您需要先將其轉換為哈希,如下所示:

redirect_to home_path(auth_params.to_h)

當我升級到Rails 5.1.4時,我也收到此錯誤。 我固定了這個

redirect_to(home_path, params: params.require(:auth).permit(:name, :email, :photo_url, :provider, :provider_id))

希望對您有所幫助。

重新啟動開發服務器並清除了Rails放置的所有cookie(最著名的是app-name會話cookie)之后,正常的強參數語法(即params.require()。permit())可以正常工作。

您做錯了。 如果要創建資源,則應通過渲染視圖(而不是重定向)來回復驗證錯誤。

您發送給用戶的響應是執行非冪等操作的結果。

這似乎很挑剔,但是在GET參數中向用戶發送電子郵件和選擇的密碼非常魯ck。

如果您要在首頁中嵌入表單,只需創建一個auths/new.html.erb視圖即可,該視圖僅顯示表單並讓用戶糾正錯誤,這非常簡單:

class AuthsController

  def create
    @auth = Auth.new(auth_params)
    if @auth.save
      redirect_to some_path, success: "Your account was created"
    else
      render :new
    end
  end

  private
   def auth_params
     params.require(:auth).permit(:name, :email, :photo_url, :provider, :provider_id)
   end
end

如果必須將表單無縫地包含在主頁中,那么您需要渲染該視圖或使用ajax來執行它。

暫無
暫無

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

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