我有注册用户的表单,当这个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>
答案 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