我有一个名为“User”的模型,我使用devise来创建帐户。当一些用户注册时,他被要求插入电子邮件和密码,之后我想将页面重定向到用户创建表单,用户将在其中插入更多详细信息,如姓名,年龄等...和用户model将有一个account_id字段,在创建时将初始化为current_account.id。我想知道最好的方法是什么。
答案 0 :(得分:2)
我在Account类中有一个user_id,因此一个帐户属于一个用户,而不是相反。这对于协会更有意义,如下:
模型/ user.rb
class User
has_one :account
模型/ account.rb
class Account
belongs_to :user
确保您生成用于将user_id添加到帐户表的迁移!!
然后您需要覆盖设计注册控制器。首先我们编辑路线 - 你会看到我还包括:帐户作为嵌套资源(单数)。这样,URL就会更好,例如/ users / 6 / account / edit
配置/ routes.rb中
devise_for :users, :controllers => {:registrations => "registrations"}
resources :users do
resource :account
end
然后创建控制器。我们将在此处覆盖两种方法,即'创建'动作,我们将在其中构建用户帐户。然后想要覆盖after_sign_up_path_for方法以重定向到编辑帐户页面。 **注意:这是针对设计3.0.3。如果您使用的是其他版本,请查看他们的github以获取注册码。
控制器/ registrations_controller.rb
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