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

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

ただいまの
回答率

90.33%

  • Ruby

    8214questions

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

  • Ruby on Rails 5

    2181questions

  • Bootstrap

    1039questions

    BootstrapはウェブサイトデザインやUIのWebアプリケーションを素早く 作成する可能なCSSフレームワークです。 Twitter風のデザインを作成することができます。

  • Devise

    262questions

    Deviseとは、Ruby-on-Railsの認証機能を追加するプラグインです。

ユーザー情報更新ができない [Rails5/bycript/Devise]

受付中

回答 0

投稿

  • 評価
  • クリップ 0
  • VIEW 572

shibu3team

score 2

前提・実現したいこと

登録済みのユーザー情報編集機能を完成させたい

具体的な説明

railsにてデートプラン支援的なwebサービスを作っていますが
ユーザー登録、マイページまで作成して

ユーザー情報の編集でつまずきました。

私の考えとしては

View側
・current_user情報をformに表示
・直接編集可能
・更新ボタンを押すとupdateメソッド

Controller側
・current_user と比較して
・送られてきたparams情報から不一致の部分を書き換え
・user.save

と言った感じなのですが、
実行して確認してみるとデータは送信されていますが、strong paramaterがfalseになってしまい
値が上手く入らず更新できません。

このやり方が不恰好なのは承知なのですが、うまいロジックが思いつかず、
こうするしかないと言ったところで躓いてしまいました。

初めてのサービス作りでつまずきの連続で困っています。
ご教授お願いいたします。

発生している問題・エラーメッセージ

3] pry(#<UsersController>)> params
=> <ActionController::Parameters {"utf8"=>"✓", "_method"=>"patch", "authenticity_token"=>"HpRU+0OUBNsSgJH3uMS1fgTK/sKXRP1ypYWSJ/kA/oGK5EpndnZSxZ5h7rKqe4oxT7lqD+HI7
rnKeNqdhSbBZw==", "user"=>{"name"=>"test3", "email"=>"test3", "profile"=>"aaaa", "password"=>"222222", "password_confirmation"=>"222222"}, "commit"=>"登録", "contr
oller"=>"users", "action"=>"update", "id"=>"4"} permitted: false>

該当のソースコード

ruby 2.4.1p111
rails 5.1.4
Bootstrap (使い慣れていない)

『table Users』

  create_table "users", force: :cascade do |t|
    t.string "name", null: false
    t.string "email", null: false
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.string "password_digest"
    t.text "profile"
    t.index ["email"], name: "uq_users_02", unique: true
    t.index ["name"], name: "uq_users_01", unique: true
  end

『model User』

class User < ApplicationRecord
  has_secure_password
  validates :name, presence: true, length: { maximum: 25 }, uniqueness: true
  validates :email, presence: true, uniqueness: true
  validates :password, presence: true, length: { in: 6..20 }
  validates :profile, length: { maximum: 140 }

  has_many :plans
  has_many :favorites
  has_many :reviews
end

『controller』

class UsersController < ApplicationController
  def new
    @user = User.new
  end

  def create
    @user = User.new(user_params)
    if @user.save
      redirect_to users_path, notice: "登録が完了しました"
    else
      flash.now[:alert] = "登録に失敗しました"
      render :new
    end
  end

  def edit
    @user = current_user
  end

  def update
    @user = current_user
    @user.name = params[:name]
    @user.email = params[:email]
    binding.pry
    if @user.save
      flash[:notice] = "ユーザー情報を編集しました"
      redirect_to("/users/#{@user.id}")
    else
      render :edit
    end
  end

private
  def user_params
    params.require(user).permit(:name, :email, :password, :password_confirmation)
  end

end

『View』

<div class="users-edit-wrapper">
  <div class="container">
    <div class="row">

      <div class="col-md-offset-7 col-md-4 users-edit-container">
        <h1 class="text-center text-white login-title">edit</h1>
        <%= form_for @user do |f| %>

        <% @user.errors.full_messages.each do |user| %>
          <div class="form-error text-red">
            <%= user %>
          </div>
        <% end %>



          <div class="form-group">
            <%= f.label :name, "ユーザー名", class: "text-white"%>
            <%= f.text_field :name, class: "form-control"%>
          </div>
          <div class="form-group">
            <%= f.label :email, "メールアドレス", class: "text-white"%>
            <%= f.text_field :email, class: "form-control"%>
          </div>

          <div class="form-group">
            <%= f.label :profile, "プロフィール", class: "text-white"%>
            <%= f.text_area :profile, placeholder:"プロフィールを入力", size: "20x5", class: "form-control"%>
          </div>

          <div class="form-group">
            <%= f.label :password,  "現在のパスワード", class: "text-white"%>
            <%= f.password_field :password, class: "form-control"%>
          </div>
          <div class="form-group">
            <%= f.label :password, "新しいパスワード", class: "text-white"%>
            <%= f.password_field :password, class: "form-control"%>
          </div>
          <div class="form-group">
            <%= f.label :password_confirmation, "新しいパスワード(再入力)", class: "text-white"%>
            <%= f.password_field :password_confirmation, class: "form-control"%>
          </div>


          <%= f.submit "登録", class: "btn-block btn-white" %>
        <% end %>
        <%= link_to "パスワードを変更する", edit_user_path, class: "btn-login text-black" %>
      </div>
    </div>
  </div>
</div>

試したこと

passwordは別ページで編集するような考えも出たが、よくわからなくなってしまいやめました。。

補足情報(言語/FW/ツール等のバージョンなど)

gem devise 4.3.0
gem becrypt 3.1.11

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

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

同じタグがついた質問を見る

  • Ruby

    8214questions

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

  • Ruby on Rails 5

    2181questions

  • Bootstrap

    1039questions

    BootstrapはウェブサイトデザインやUIのWebアプリケーションを素早く 作成する可能なCSSフレームワークです。 Twitter風のデザインを作成することができます。

  • Devise

    262questions

    Deviseとは、Ruby-on-Railsの認証機能を追加するプラグインです。