Rails使用url中的get参数提交表单

时间:2016-12-01 17:52:09

标签: ruby-on-rails

我有注册用户的表单,当这个url有get参数时 http://localhost:3000/signup?list_id=10 需要将此参数传递给创建用户的操作

<%= 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>

1 个答案:

答案 0 :(得分:1)

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

首先,在以下情况下将虚拟属性添加到用户模型: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