试图访问模型中的参数



我已经通过设计gem创建了一个User模型

我的关系设置为:

  • 用户与角色之间存在多对多关系
  • 用户belongs_to(一对多关系)Batch
  • 用户has_one(一对一关系)UserProfile

现在,每次创建用户时,我都会调用方法cup,该方法也会创建UserProfile。问题是我不能访问模型中除了设计自己的参数之外的任何东西。

例如,我有一个下拉菜单来选择角色,但我不能访问它的选定值

我的目标是这样做:

  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

我的参数是这样的:

{"use utf8"=>"✓","authenticity_token"=>"TbsLJxZB2aeDgj8RitTRKURCc3KODCKpv/xphwhAaIw = ","用户"=>{"用户名"=>"rfdsfew"、"role_id"=>"1","batch_id"=> " 1 "},"用户"=>{"电子邮件"=>"2 @223.com","密码"=>"(过滤)","password_confirmation"=>"过滤"},"提交"=>"注册"}

我可以访问user哈希中的参数,但不能访问users哈希

中的参数。

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

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

before_filter :configure_permitted_parameters, if: :devise_controller?
protected
def configure_permitted_parameters
  devise_parameter_sanitizer.for(:sign_up) << :username
end

主要是额外的参数应该是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传递给选择助手,他们应该为您做这个

相关内容

  • 没有找到相关文章

最新更新