Ruby on rails Rails试图访问模型中的参数

Ruby on rails Rails试图访问模型中的参数,ruby-on-rails,ruby,ruby-on-rails-3,hash,devise,Ruby On Rails,Ruby,Ruby On Rails 3,Hash,Devise,我通过Desive gem创建了一个用户模型 我的关系设置为: 用户与角色之间存在多对多关系 用户属于批处理(一对多关系) 用户与UserProfile有一对一的关系 现在,每次创建用户时,我都会调用创建用户配置文件的方法cup。问题是,除了在模型中设计自己的参数外,我无法访问其他任何东西 例如,我可以为角色选择一个下拉列表,但我无法访问其选定值 我的目标是: def cup if role.title == 'this' create_user_profile(:u

我通过Desive gem创建了一个用户模型

我的关系设置为:

  • 用户与角色之间存在多对多关系
  • 用户属于批处理(一对多关系)
  • 用户与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
class用户username)
结束
#包括默认设计模块。其他可供选择的项目包括:
#:可确认、:可锁定、:超时和:全授权
设计:数据库可验证,可注册,
:可恢复,:可记忆,:可跟踪,:可验证
结束
我的参数如下所示:

{“utf8”=>“✓", “真实性令牌”=>“tbsljxzb2aedj8rittrkurcc3kodckpv/xphwhAaIw=”, “用户”=>{“用户名”=>“RFDSNOW”、“角色id”=>“1”、“批处理id”=>“1”}, “用户”=>{“电子邮件”=>”2@223.com“,“密码”=>“[已筛选]”, “密码确认”=>“[筛选]”},“提交”=>“注册”}

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

我的猜测是,这是因为DeVICE controller中不允许用户散列,因为我无法访问DeVICE的控制器,所以我不知道如何允许用户散列

我在网上找到了这个,但它不起作用:

before_filter :configure_permitted_parameters, if: :devise_controller?

protected

def configure_permitted_parameters
  devise_parameter_sanitizer.for(:sign_up) << :username
end
在\u过滤器之前:配置\u允许的\u参数,如果::设计\u控制器?
受保护的
def配置\u允许的\u参数

设计参数消毒剂。对于(:注册)来说,主要的事情是额外的参数应该是
参数[:user]
的一部分,所以将调用更改为
集合\u选择

接下来,您需要确保Desive允许这些额外的参数-这就是

 devise_parameter_sanitizer.for(:sign_up) << :username
这使我想到了您需要的最后一个更改:您与角色的关联是has\u并且属于多个:您不能分配
角色id
,您必须分配
角色id
,它必须是一个数组


您需要将表单元素使用的名称更改为
role\u id
,rails要将其解析为数组,您需要添加
[]
到此结束。如果您将
:multiple=>true
传递给选择的帮助程序,他们应该为您执行此操作。

为什么您有
用户
散列和
用户
散列?因为
用户
散列是由设备自己的字段生成的,并且
集合_select
不允许我将其值添加到用户散列中NSTAD必须使用<代码>:用户<代码> >生成< <代码>用户< /COD> Hash……例如:<代码> <代码> PARAMs在模型中是不可访问的,即使您将它们作为参数传递,那么它将被认为是不好的实践,也可能是危险的。我一直在获得这个错误<代码>未定义的局部变量或方法< /COD> DEVISEY参数>“消毒剂”对于#`,我已经尝试了我能找到的一切,但都没有解决它…你知道如何解决它吗?但是我确实解决了集合(u select),并且
角色id
批处理id
现在显示在
用户
哈希下,而不是
用户
听起来你在错误的位置调用它-应该在控制器上的前置过滤器我在创建后改为在创建前:cup
,但我仍然收到相同的错误设计位根本不属于您的模型
devise_parameter_sanitizer.for(:sign_up) {|u| u.permit(:email, :password, :username, :batch_id, :role_ids => [])}