Rails试图访问Model中的参数

时间:2015-05-30 05:22:08

标签: ruby-on-rails ruby ruby-on-rails-3 hash devise

我通过Devise gem创建了一个User模型

我的关系设置如下:

  • 用户与角色有很多关系
  • 用户belongs_to(一对多关系)批处理
  • 用户has_one(与一对一关系)UserProfile

现在,每次创建用户时,我都会调用创建UserProfile的方法 cup 。问题是我无法访问模型中设计自己的参数以外的任何内容。

例如,我有一个下拉列表来选择角色,但我无法访问其选定的值

我的目标是做一些事情:

  def cup
    if role.title == 'this'
      create_user_profile(:username => 'username01')
    else
      create_user_profile(:username => 'username02')
    end
  end

这就是模型的样子:

class User < ActiveRecord::Base

  has_and_belongs_to_many :roles
  belongs_to :batch
  has_one :user_profile

  after_create :cup

  def cup
    create_user_profile(:username => 'username')

  end

  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable
end

我的参数如下所示:

  

{ “UTF8”=&gt; “中✓”,   “authenticity_token”=&gt; “中TbsLJxZB2aeDgj8RitTRKURCc3KODCKpv / xphwhAaIw =”,   “users”=&gt; {“username”=&gt;“rfdsfew”,“role_id”=&gt;“1”,“batch_id”=&gt;“1”},   “user”=&gt; {“email”=&gt;“2@223.com”,“password”=&gt;“[已过滤]”,   “password_confirmation”=&gt;“[过滤]”},“提交”=&gt;“注册”}

我可以访问用户哈希中的参数但不能访问用户哈希

我的猜测是,这是因为在设计控制器中不允许用户哈希,因为我无法访问设备的控制器我不知道如何允许用户哈希。

我在互联网上发现了这个,但它不起作用:

before_filter :configure_permitted_parameters, if: :devise_controller?

protected

def configure_permitted_parameters
  devise_parameter_sanitizer.for(:sign_up) << :username
end

1 个答案:

答案 0 :(得分:0)

主要的是额外参数应该是params[:user]的一部分,因此请将您的调用更改为collection_select

接下来,你需要确保设计允许那些额外的参数 - 这是

的目的
 devise_parameter_sanitizer.for(:sign_up) << :username

您需要为每个额外参数执行此操作。但是对于数组参数,您需要使用更长的形式:

devise_parameter_sanitizer.for(:sign_up) {|u| u.permit(:email, :password, :username, :batch_id, :role_ids => [])}

这让我想到你需要的最后一个更改:你与角色的关联是has_and_belongs_to_many:你不能分配role_id,你必须分配role_ids,它必须是一个数组。

您需要将表单元素使用的名称更改为role_ids,并将rails解析为数组,您需要将[]添加到其末尾。如果您将:multiple => true传递给选择助手,他们应该为您执行此操作。