Ruby on rails 如何使用Desive将用户与帐户关联?
我有一个名为“用户”的模型,我使用Desive创建帐户。当一些用户注册时,他被要求插入一封电子邮件和密码,之后我想将页面重定向到用户创建表单,用户将在其中插入更多详细信息,如姓名、年龄等。。。用户模型将有一个account_id字段,该字段将在创建时初始化为current_account.id。我想知道做这件事的最佳方法是什么。我希望Account类中有一个用户id,因此帐户属于用户,而不是相反。这是为了让协会更有意义,比如: models/user.rb models/account.rb 确保生成迁移以将用户id添加到account表 然后,您需要覆盖“设计注册”控制器。首先,我们编辑路由-您将看到我还包括:帐户作为嵌套资源(单数)。这样URL会更好,例如/users/6/account/edit config/routes.rb 然后创建控制器。这里我们将覆盖两个方法,即“创建”操作,在其中我们将在其中构建用户帐户。然后要覆盖方法的after_sign_path_以重定向到编辑帐户页。**注:这适用于Desive 3.0.3。如果您使用的是不同的版本,请查看他们的github以获取注册代码 控制器/注册\u controller.rbRuby on rails 如何使用Desive将用户与帐户关联?,ruby-on-rails,authentication,devise,Ruby On Rails,Authentication,Devise,我有一个名为“用户”的模型,我使用Desive创建帐户。当一些用户注册时,他被要求插入一封电子邮件和密码,之后我想将页面重定向到用户创建表单,用户将在其中插入更多详细信息,如姓名、年龄等。。。用户模型将有一个account_id字段,该字段将在创建时初始化为current_account.id。我想知道做这件事的最佳方法是什么。我希望Account类中有一个用户id,因此帐户属于用户,而不是相反。这是为了让协会更有意义,比如: models/user.rb models/account.rb 确
类注册控制器resource.id)#创建帐户的代码
如果resource.active\u用于\u身份验证?
设置flash消息:注意:如果是导航格式,则已注册?
注册(资源名称、资源)
使用资源响应:位置=>在为(资源)注册路径之后
其他的
设置flash消息:注意,如果是导航格式,“已注册但{resource.inactive{message}”?
登录后,会话数据过期!
使用资源响应:位置=>在不活动之后注册路径(资源)
结束
其他的
清除密码资源
用资源回应你
结束
结束
受保护的
#覆盖所需路线的注册后路径,例如
注册后的def路径(资源)
编辑用户帐户路径(resource.id)
结束
结束
我只是在本地玩了一下,有一些小错误和遗漏。我已经用测试过的代码更新了我的答案。
class User
has_one :account
class Account
belongs_to :user
devise_for :users, :controllers => {:registrations => "registrations"}
resources :users do
resource :account
end
class RegistrationsController < Devise::RegistrationsController
def create
build_resource(sign_up_params)
if resource.save
resource.build_account(:user_id => resource.id) # code to create account
if resource.active_for_authentication?
set_flash_message :notice, :signed_up if is_navigational_format?
sign_up(resource_name, resource)
respond_with resource, :location => after_sign_up_path_for(resource)
else
set_flash_message :notice, :"signed_up_but_#{resource.inactive_message}" if is_navigational_format?
expire_session_data_after_sign_in!
respond_with resource, :location => after_inactive_sign_up_path_for(resource)
end
else
clean_up_passwords resource
respond_with resource
end
end
protected
# override the after signup path to your desired route, e.g
def after_sign_up_path_for(resource)
edit_user_account_path(resource.id)
end
end