質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

0回答

967閲覧

wizard形式のユーザー新規登録において、画像を保存できるようにしたいです

dragon38

総合スコア1

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

1クリップ

投稿2021/04/03 00:14

######質問内容

現在、オリジナルアプリを作成中です。
wizard形式のユーザー新規登録で、ユーザー本人の画像を保存して、
トップページに表示できるようにしたいです。
1ページ目→ユーザー情報入力 2ページ目→アンケート内容入力
3ページ目→登録完了

usersテーブルとquestionnairesテーブル(アンケート)に値は保存できるのですが、
active_storageのテーブルには画像を保存できません。

######試したこと

  • registrations_controllerを以下のように変更

→しかし、うまくいかず。

class Users::RegistrationsController < Devise::RegistrationsController before_action :configure_sign_up_params, only: [:create] def new super end def create @user = User.new(sign_up_params) unless @user.valid? render :new and return end session["devise.regist_data"] = {user: @user.attributes} session["devise.regist_data"][:user]["password"] = params[:user][:password] @questionnaire = @user.build_questionnaire render :new_questionnaire end def create_questionnaire @user = User.new(session["devise.regist_data"]["user"]) @questionnaire = Questionnaire.new(questionnaire_params) unless @questionnaire.valid? render :new_questionnaire and return end @user.build_questionnaire(@questionnaire.attributes) @user.save session["devise.regist_data"]["user"].clear sign_in(:user, @user) end protected def configure_sign_up_params devise_parameter_sanitizer.permit(:sign_up, keys: [:nickname, :image, :gender_id, :birth_day]) end def questionnaire_params params.require(:questionnaire).permit(:book_category_id, :book_genre_id, :purchase_place_id, :reading_type_id) end end
  • privateの表記をprotectedに変更

→効果なし。

####### config/routes.rb

Rails.application.routes.draw do devise_for :users, controllers: { registrations: 'users/registrations' } devise_scope :user do get 'questionnaires', to: 'users/registrations#new_questionnaire' post 'questionnaires', to: 'users/registrations#create_questionnaire' end root to: "books#index" end

######application_controller.rb

class ApplicationController < ActionController::Base before_action :basic_auth before_action :configure_permitted_parameters, if: :devise_controller? private def basic_auth authenticate_or_request_with_http_basic do |username, password| username == ENV["BASIC_AUTH_USER"] && password == ENV["BASIC_AUTH_PASSWORD"] # 環境変数を読み込む記述に変更 end end def configure_permitted_parameters devise_parameter_sanitizer.permit(:sign_up, keys: [:nickname, :image, :gender_id, :birth_day]) end end
registrations_controller
def new @user = User.new end def create @user = User.new(sign_up_params) unless @user.valid? render :new and return end session["devise.regist_data"] = {user: @user.attributes} session["devise.regist_data"][:user]["password"] = params[:user][:password] @questionnaire = @user.build_questionnaire render :new_questionnaire end def create_questionnaire @user = User.new(session["devise.regist_data"]["user"]) @questionnaire = Questionnaire.new(questionnaire_params) @questionnaire.user_id = @user.id unless @questionnaire.valid? render :new_questionnaire and return end @user.build_questionnaire(@questionnaire.attributes) @user.save session["devise.regist_data"]["user"].clear sign_in(:user, @user) end private def questionnaire_params params.require(:questionnaire).permit(:book_category_id, :book_genre_id, :purchase_place_id, :reading_type_id) end
models/user.rb
class User < ApplicationRecord extend ActiveHash::Associations::ActiveRecordExtensions devise :database_authenticatable, :registerable, :recoverable, :rememberable, :validatable has_one_attached :image has_one :questionnaire belongs_to_active_hash :gender has_many :books has_many :comments with_options presence: true do validates :nickname, length: { maximum: 12} validates :birth_day, :email validates :password, length: { minimum: 12, maximum: 20 }, format: { with: /\A(?=.*?[a-z])(?=.*?\d)[a-z\d]+\z/i, message: 'は半角英数混合で入力してください。' } end # active_hashのデータ validates :gender_id, numericality: { other_than: 0 , message: 'を入力してください'} end

######views/shared/_header.html.erb

<ul class='layout-change'> <% if user_signed_in? %> <div class="login-condition"> <li>ログインしています</li> <li class="user-nickname"><%= current_user.nickname %></li> <% if current_user.image.attached? %> <li><%= image_tag current_user.image, width: "45", height: "45", id: 'user-image' %></li> <% else%> <li><%= image_tag "no-image.png", width: "45", height: "45", id: 'user-image' %></li> <% end %> </div> <% else %> <div class="not-login-condition"> <li> はじめての方はこちら <%= link_to(new_user_session_path, class:'sign-in-btn', id:"orange-btn") do %> <span class="sign-btn-text">ログイン</span> <% end %> </li> <li> <%= link_to(new_user_registration_path, class:'sign-up-btn', id:"blue-btn") do %> <span class="sign-btn-text">新規登録</span> <% end %> </li> </div> <% end %> </ul>

非常に長くなってしまいました。
何か助言などがありましたら、コメントお願いします!

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問