2016-12-01 21 views
0

我有注册用户窗体,当这个网址有得到的参数一样 http://localhost:3000/signup?list_id=10 需要这个参数传输到行动在这次行动用户创建用户Rails的提交形式获取参数的URL

<%= 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"=>"[email protected]", "password"=>"222", "password_confirmation"=>"222"}, "commit"=>"Create my account", "controller"=>"users", "action"=>"create"} permitted: false> 

回答

1

它在你的params散列中可用,所以你可以将它作为一个隐藏字段添加到你的表单中,因此它将与其他params一起提交。然后确保在控制器中将该参数列入白名单。

首先,在您的用户模型中添加虚拟属性,如果:list_id尚不是用户的持久属性。这是通过添加下面一行在user.rb模型文件进行:

attr_accessor :list_id 

然后添加以下表单视图中:

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

然后在你的控制器,你白名单的PARAMS你会将list_id添加为安全参数。你没有发布你的strong_params方法,但应该是这样的:

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

它的工作,thnks –