首页 > 解决方案 > 如何将我的 session[:user_id] 参数与表单输入参数一起传递给 rails 中的模型?

问题描述

我正在根据用户 ID 创建一个会话 ID。我想将此会话 ID 值与其他一些表单参数(即年龄、地址、性别)一起发送。我怎样才能做到这一点?

我可以这样做吗?

def details_params
  params.require(:details).permit(:age, :address, :gender).merge(:session[:user_id])
end

控制器代码

class SessionsController < ApplicationController

  def create
    @present_users = User.new(token: login_params).get_login_credentials
    @parsed_body = JSON.parse(@present_users, :symbolize_names => true) #parsing the json response.body i.e. ':' json to '=>' hash

    if @parsed_body[:result].any?{|h| h[:id][-1]} #checking if user got registered or not
      session[:user_id] = @parsed_body[:result][-1][:id] #assigining user id as session id
      puts "The session id is: #{session[:user_id]}"
      render 'show'
    else
      puts "Login Error! Check details and try again"
      redirect_to '/', :notice => "Invalid id, username or password"
    end
  end

  def createcard
    @newdetails = User.new(token: details_params).get_my_card
    puts "@newdetails is: #{@newdetails}"

    puts "session id is: #{session[:user_id]}"

    @mycard = JSON.parse(@newdetails, :symbolize_names => true)
    puts "@mycard data is: #{@mycard}"
    render 'createcard'
  end

private 

  def login_params
    params.require(:login).permit(:id, :username, :password)
  end

  def details_params
    params.require(:details).permit(:age, :address, :gender).merge(:session[:user_id])
  end

end

标签: ruby-on-rails

解决方案


这里:

params.require(:details).permit(:age, :address, :gender).merge(:session[:user_id])

.merge想要一个hash并且你正在传递一个值。尝试,而不是:

params.
  require(:details).
  permit(:age, :address, :gender).
  merge({session_id: session[:user_id]})

这假设这session[:user_id]是一些有意义的值。


推荐阅读