Ruby on Rails从表单中的控制器访问参数

时间:2014-11-08 02:29:29

标签: ruby-on-rails

我试图在控制器中以字符串

的形式访问参数

当我记录

Rails.logger.debug  "!!!" << "#{params[:username]}"
即使

,感叹号也没有出现
Rails.logger.debug params.inspect

表示用户名有值。

有人可以告诉我如何在我的日志调试声明中显示用户名值吗?

控制器代码:

def create
    Rails.logger.debug params.inspect
    Rails.logger.debug  "!!!" << "#{@user[:username]}"

    @user = Users.new(user_params)

    {params[:birth_year]}"
    if @user.save
        redirect_to(:controller => 'users', :action => 'index')
    else
        render(:controller => 'access', :action => 'index')
    end
end

最后几行记录信息:

"user"=>{"username"=>"TrevorTT" ...

!!!

2 个答案:

答案 0 :(得分:0)

@user在定义之前被调用。它将返回零。

def create
  #...
  Rails.logger.debug  "!!!" << "#{@user[:username]}"   # <-- @user is nil

  @user = User.new(user_params)

您可以将该线留在原位并使用user_params

def create
  #...
  Rails.logger.debug  "!!!" << "#{user_params[:username]}" 

  @user = User.new(user_params)

或移动@user =

下方的行
def create
  #...      
  @user = User.new(user_params)

  Rails.logger.debug  "!!!" << "#{@user[:username]}"

此外,您的模型名称应该是单一的(例如。User)。

答案 1 :(得分:0)

@user无法在此行Rails.logger.debug "!!!" << "#{@user[:username]}"中使用,因为它尚未创建。要么搬家 记录器上方@user = Users.new(user_params)

但根据我的理解,您只想记录username参数。

所以你可以这样做params[:user][:username],因为username嵌套在user参数下。所以你的代码应该是:

def create
    Rails.logger.debug params.inspect
    Rails.logger.debug  "!!!" << "#{params[:user][:username]}"

    ....
end