Railsのdeviseで新規登録するとき、親のモデル(belongs_toなもの)も一緒に作る方法
環境
- Rails 5.2.2
- Ruby 2.5.3
前提
- User belongs_to Organization
- Organization has_many Users
- Userを新規登録するとき、Organizationも一緒に作りたい(というか作れないとエラーで登録できない)
コード
class ApplicationController < ActionController::Base
...
before_action :configure_permitted_parameters, if: :devise_controller?
protected
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:sign_up, keys: [organization_attributes: [:name]])
end
end
# app/views/devise/registrations/new.html.erb
...
<% resource.organization ||= Organization.new %>
<%= simple_form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %>
<%= f.error_notification %>
<div class="form-inputs">
<%= f.input :email,
required: true,
autofocus: true ,
input_html: { autocomplete: "email" }%>
<%= f.input :password,
required: true,
hint: ("#{@minimum_password_length} characters minimum" if @minimum_password_length),
input_html: { autocomplete: "new-password" } %>
<%= f.input :password_confirmation,
required: true,
input_html: { autocomplete: "new-password" } %>
<%= f.fields_for :organization do |organization_form| %>
<%= organization_form.input :name %>
<% end %>
</div>
<div class="form-actions">
<%= f.button :submit, t("devise.sign_up") %>
</div>
<% end %>
...
参考
- User belongs_to Organization
- Organization has_many Users
- Userを新規登録するとき、Organizationも一緒に作りたい(というか作れないとエラーで登録できない)
コード
class ApplicationController < ActionController::Base
...
before_action :configure_permitted_parameters, if: :devise_controller?
protected
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:sign_up, keys: [organization_attributes: [:name]])
end
end
# app/views/devise/registrations/new.html.erb
...
<% resource.organization ||= Organization.new %>
<%= simple_form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %>
<%= f.error_notification %>
<div class="form-inputs">
<%= f.input :email,
required: true,
autofocus: true ,
input_html: { autocomplete: "email" }%>
<%= f.input :password,
required: true,
hint: ("#{@minimum_password_length} characters minimum" if @minimum_password_length),
input_html: { autocomplete: "new-password" } %>
<%= f.input :password_confirmation,
required: true,
input_html: { autocomplete: "new-password" } %>
<%= f.fields_for :organization do |organization_form| %>
<%= organization_form.input :name %>
<% end %>
</div>
<div class="form-actions">
<%= f.button :submit, t("devise.sign_up") %>
</div>
<% end %>
...
参考
class ApplicationController < ActionController::Base
...
before_action :configure_permitted_parameters, if: :devise_controller?
protected
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:sign_up, keys: [organization_attributes: [:name]])
end
end
# app/views/devise/registrations/new.html.erb
...
<% resource.organization ||= Organization.new %>
<%= simple_form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %>
<%= f.error_notification %>
<div class="form-inputs">
<%= f.input :email,
required: true,
autofocus: true ,
input_html: { autocomplete: "email" }%>
<%= f.input :password,
required: true,
hint: ("#{@minimum_password_length} characters minimum" if @minimum_password_length),
input_html: { autocomplete: "new-password" } %>
<%= f.input :password_confirmation,
required: true,
input_html: { autocomplete: "new-password" } %>
<%= f.fields_for :organization do |organization_form| %>
<%= organization_form.input :name %>
<% end %>
</div>
<div class="form-actions">
<%= f.button :submit, t("devise.sign_up") %>
</div>
<% end %>
...
https://github.com/plataformatec/devise#strong-parameters
https://stackoverflow.com/a/7987480/7824640
Author And Source
この問題について(Railsのdeviseで新規登録するとき、親のモデル(belongs_toなもの)も一緒に作る方法), 我々は、より多くの情報をここで見つけました https://qiita.com/hidehiro98/items/6dc033fe1b123a5bceea著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .