Rails在注册期间创建一个用户和一个belongs_to模型

时间:2019-06-08 11:09:19

标签: ruby-on-rails devise ruby-on-rails-5 ruby-on-rails-5.2

我希望用户注册(Devise)时,在注册表格的同时创建其第一个“个人资料”帐户。

我尝试使用“ fields_for”,但无法正常工作。我可以在注册表单中添加hidden_​​field,因为尚未创建“用户”。 我该怎么办?

模型

class User < ApplicationRecord
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable,  and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :validatable,
         :trackable

class Profile < ApplicationRecord

  belongs_to :user #creator

查看(注册)

<%= form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %>

    <%= f.fields_for :profiles, resource.profiles.build do |s| %>

        <%= s.text_field :name%>
     <% end %>
<% end %>

1 个答案:

答案 0 :(得分:1)

您可以在模型中回电。 像 public class DownloadFileAsyncTask extends AsyncTask<String,String,String>{ @Override protected void onPreExecute() { super.onPreExecute(); //show Progressbar } @Override protected String doInBackground(String... strings) { //downloadFile() return null; } @Override protected void onPostExecute(String s) { super.onPostExecute(s); //close spinner } } ,然后创建一个配置文件。

您可以在此处查找回调:https://guides.rubyonrails.org/active_record_callbacks.html#available-callbacks

它看起来像这样:

after_save

另一个选择是自己生成一个devise控制器。您可以按照他们的自述文件中的步骤进行操作:https://github.com/plataformatec/devise/wiki/Tool:-Generate-and-customize-controllers

并按照他们的建议,通过添加 class User < ApplicationRecord # Include default devise modules. Others available are: # :confirmable, :lockable, :timeoutable, and :omniauthable devise :database_authenticatable, :registerable, :recoverable, :rememberable, :validatable, :trackable after_save :create_profile def create_profile Profile.create(user: self,...) end end

Profile.new(...)