我试图让我的Rails应用程序尽可能简单地注册一个新帐户。我使用的是Devise,只需要默认的email
和password/confirmation
字段。
我的目标是创建一个帖子注册向导,用户将填写其余的个人资料,其中包括Company name, address, and CC# information
。
因此,最终,用户belong_to :company
和公司have_many :users
。
如果我从一开始就在我的模型中声明这些内容,则用户需要输入公司信息,此时我不希望他们这样做。
在我收集了用户信息并且他们已成功登录我的应用后,创建关联的最佳做法是什么?或者这不可能吗?
答案 0 :(得分:0)
有可能。如果用户模型尚未存在,Devise将仅向您的用户模型添加某些字段。例如,您的用户模型中可以包含30个字段,而Devise最初可能只需要设置两个(例如电子邮件和密码)。然后,您可以随时更新其余字段。用户无需从一开始就输入所有字段。那不是很实用。
在创建关联时,您唯一需要注意的是,通过foreign_keys在模型之间存在链接。因此,用户将通过用户模型中包含的唯一公司密钥链接到公司。
如果你添加了一些代码以及你遇到的问题,我可以帮助解决任何错误。
答案 1 :(得分:0)
我的目标是创建一个用户填写的帖子注册向导 其余的个人资料,包括公司名称,地址, 和CC#信息。
您可以覆盖Devise::ConfirmationsController
类,如
class DeviseOverride::ConfirmationsController < Devise::ConfirmationsController
def after_confirmation_path_for(resource_name, resource)
if resource.has_all_data?
sign_in resource
home_page_path(resource)
elsif resource.has_partial_data?
sign_in resource
complete_form_path(resource)
else
flash[:error] = 'Invalid request'
root_path
end
end
end
路线
devise_for :users, path: '',
path_names: { sign_up: :signup, sign_in: :login, sign_out: :logout },
controllers: {
confirmations: 'devise_override/confirmations'
}
最终,用户将属于:公司和公司 have_many:用户
确认后表单应该将数据发布到某个控制器,您可以将数据保存到相关用户并相应地创建资源。