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

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

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

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

Devise

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

Ruby

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

Bootstrap

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

Q&A

0回答

385閲覧

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

shibu3team

総合スコア7

Ruby on Rails 5

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

Devise

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

Ruby

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

Bootstrap

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

0グッド

1クリップ

投稿2017/12/09 09:47

###前提・実現したいこと
登録済みのユーザー情報編集機能を完成させたい

###具体的な説明

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

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問