注册后创建belongs_to关联

时间:2017-06-27 02:17:19

标签: ruby-on-rails devise confirmation

我试图让我的Rails应用程序尽可能简单地注册一个新帐户。我使用的是Devise,只需要默认的emailpassword/confirmation字段。

我的目标是创建一个帖子注册向导,用户将填写其余的个人资料,其中包括Company name, address, and CC# information

因此,最终,用户belong_to :company和公司have_many :users

如果我从一开始就在我的模型中声明这些内容,则用户需要输入公司信息,此时我不希望他们这样做。

在我收集了用户信息并且他们已成功登录我的应用后,创建关联的最佳做法是什么?或者这不可能吗?

2 个答案:

答案 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:用户

确认后表单应该将数据发布到某个控制器,您可以将数据保存到相关用户并相应地创建资源。

P.S。 May be this doc will help you