【发布时间】:2015-08-13 02:06:11
【问题描述】:
我通过 Devise gem 创建了一个用户模型
我的关系设置为:
- 用户与角色具有多对多关系
- 用户属于_to(一对多关系)批次
- 用户 has_one(与)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"=>"✓", "authenticity_token"=>"TbsLJxZB2aeDgj8RitTRKURCc3KODCKpv/xphwhAaIw=", "用户"=>{"用户名"=>"rfdsfew", "role_id"=>"1", "batch_id"=>"1"}, "user"=>{"email"=>"2@223.com", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}, "commit"=>"注册"}
我可以访问 user 哈希中的参数,但不能访问 users 哈希
我的猜测是,这是因为设计控制器中不允许用户散列,因为我无法访问设计的控制器我不知道如何允许 users 散列。
我在网上找到了这个,但没有用:
before_filter :configure_permitted_parameters, if: :devise_controller?
protected
def configure_permitted_parameters
devise_parameter_sanitizer.for(:sign_up) << :username
end
【问题讨论】:
-
为什么你有一个
users哈希和一个user哈希? -
因为
user哈希是由设计自己的字段生成的,collection_select不允许我将其值添加到用户哈希中,而是我必须使用:users生成 @987654329 @hash... 例如:<%= collection_select(:users, :role_id, Role.all, :id, :role)%> -
参数在模型中不可访问,即使您将它们作为参数传递,也会被视为不好的做法,也可能很危险。
标签: ruby-on-rails ruby ruby-on-rails-3 hash devise