簡體   English   中英

Rails提交帶有從url獲取參數的表單

[英]Rails submit form with get parameters from url

我有注冊用戶的表單,當此url具有諸如http://localhost:3000/signup?list_id=10類的get參數時,需要將此參數傳遞給創建用戶的操作

<%= form_for(@user) do |f| %>
<%= render 'shared/error_messages', user: @user %>

<%= f.label :name %>
<%= f.text_field :name, class: 'form-control' %>

<%= f.label :email %>
<%= f.email_field :email, class: 'form-control' %>

<%= f.label :password %>
<%= f.password_field :password, class: 'form-control' %>

<%= f.label :password_confirmation %>
<%= f.password_field :password_confirmation, class: 'form-control' %>

<%= f.submit yield(:button_text), class: "btn btn-primary" %>

在此操作中,用戶創建看不到該參數

  def create
debugger
@user = User.new(user_params)
if @user.save
  log_in @user
  flash[:success] = "Welcome to the Sample App!"
  redirect_to @user
else
  render "new"
end

結束

(byebug) params<ActionController::Parameters {"utf8"=>"✓", "authenticity_token"=>"I5+lc0T2fqy2Ie56rMnkR6Eff60nJmiuaTob7xAqknB6YgHZpmEByyRpCanpnNqyO9H/wMWbm7IumdXRyUABcA==", "user"=>{"name"=>"Ivan", "email"=>"ss@ss.com", "password"=>"222", "password_confirmation"=>"222"}, "commit"=>"Create my account", "controller"=>"users", "action"=>"create"} permitted: false>

它在params哈希中可用,因此您可以將其作為隱藏字段添加到表單中,以便與其他params一起提交。 然后確保在控制器中將該參數列入白名單。

首先,如果:list_id還不是用戶的持久屬性,則將虛擬屬性添加到您的用戶模型。 這是通過在user.rb模型文件中添加以下行來完成的:

attr_accessor :list_id

然后在表單視圖中添加以下內容:

<%= f.hidden_field :list_id, :value => params[:list_id] %>

然后,在將參數列入白名單的控制器中,您將添加:list_id作為安全參數。 您沒有發布您的strong_params方法,但是應該像這樣:

def user_params
    params.require(:user).permit(:list_id, :name, :email, :password, :password_confirmation)
end

暫無
暫無

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

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