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

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

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

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

Ruby

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

解決済

Rails プロフィールを編集する際に、コメントだけ変更が反映されない。

masaosan18
masaosan18

総合スコア64

Ruby on Rails 5

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

Ruby

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

1回答

0評価

0クリップ

385閲覧

投稿2020/06/26 09:31

お世話になっています。
今、Railsでアプリを作成しています。

プロフィールの編集画面を作成しておりますが、名前、アドレス、画像などは変更した際に、反映されるものの、コメントのみ変更しても反映されずに変更前の文字のままなってしまいます。

class UsersController < ApplicationController before_action :authorize, except: [:sign_up, :sign_up_process, :sign_in, :sign_in_process] before_action :redirect_to_top_if_signed_in, only: [:sign_up, :sign_in] # トップページ def top if params[:word].present? @posts = Post.where("caption like ?", "%#{params[:word]}%").order("id desc") else @posts = Post.all.order("id desc").page(params[:page]) end @recommends = User.where.not(id: current_user.id).where.not(id: current_user.follows.pluck(:follow_user_id)).limit(3) end # ユーザー登録ページ def sign_up @user = User.new render layout: "application_not_login" end # ユーザー登録処理 def sign_up_process user = User.new(user_params) if user.save user_sign_in(user) redirect_to top_path and return else # 登録が失敗したらユーザー登録ページへ flash[:danger] = "ユーザー登録に失敗しました。" redirect_to("/sign_up") end end # サインインページ def sign_in @user = User.new render layout: "application_not_login" end # サインイン処理 def sign_in_process # パスワードをmd5に変換 password_md5 = User.generate_password(user_params[:password]) # メールアドレスとパスワードをもとにデータベースからデータを取得 user = User.find_by(email: user_params[:email], password: password_md5) if user # セッション処理 user_sign_in(user) # トップ画面へ遷移する redirect_to top_path and return else # サインインが失敗した場合 flash[:danger] = "サインインに失敗しました。" redirect_to("/sign_in") end end # サインアウト def sign_out # ユーザーセッションを破棄 user_sign_out # サインインページへ遷移 redirect_to sign_in_path and return end # プロフィールページ def show # ここに処理を実装 @user = User.find(params[:id]) @posts = Post.where(user_id: @user.id) end # プロフィール編集ページ def edit @user = User.find(current_user.id) end # プロフィール更新処理 def update # ここに処理を実装 upload_file = params[:user][:image] if upload_file.present? # あった場合はこの中の処理が実行される # 画像のファイル名取得 upload_file_name = upload_file.original_filename output_dir = Rails.root.join('public', 'users') output_path = output_dir + upload_file_name File.open(output_path, 'w+b') do |f| f.write(upload_file.read) end current_user.update(user_params.merge({image: upload_file.original_filename})) # データベースに更新 else current_user.update(user_params) end redirect_to profile_path(current_user) and return end # パラメータを取得 def user_params params.require(:user).permit(:name, :email, :password, :comment) end # フォロー処理 def follow # ここに処理を実装 @user = User.find(params[:id]) if Follow.exists?(user_id: current_user.id, follow_user_id: @user.id) # フォローを解除 Follow.find_by(user_id: current_user.id, follow_user_id: @user.id).destroy else # フォローする Follow.create(user_id: current_user.id, follow_user_id: @user.id) end redirect_back(fallback_location: top_path, notice: "フォローを更新しました。") end # フォローリスト def follow_list # プロフィール情報の取得 @user = User.find(params[:id]) # ここに処理を実装 @users = User.where(id: Follow.where(user_id: @user.id).pluck(:follow_user_id)) end # 認証チェック def authorize redirect_to sign_in_path unless user_signed_in? end #22-3 プライベート private def user_params params.require(:user).permit(:name, :email, :password) end end
<div class="profile_edit container"> <%= form_for @user, url: profile_edit_path, method: :post do |f| %> <div class="field"> <%= f.label :name, "名前" %> <%= f.text_field :name, placeholder: "名前を入力して下さい。" %> </div> <div class="field"> <%= f.label :email, "メールアドレス" %> <%= f.text_field :email, placeholder: "メールアドレスを入力して下さい。" %> </div> <div class="field"> <%= f.label :comment, "コメント" %> <%= f.text_field :comment, placeholder: "自己紹介など" %> </div> <div class="field"> <label>プロフィール画像</label> <div class="file_wrap"> <%= f.file_field :image %> </div> </div> <div class="button_wrap"> <input type="submit" value="保存する" class="button"> </div> <% end %> </div>
Rails.application.routes.draw do root 'users#top' get '/top', to:'users#top', as: :top get '/follow/(:id)', to:'users#follow', as: :follow get '/sign_up', to:'users#sign_up', as: :sign_up post '/sign_up', to:'users#sign_up_process' get '/sign_in', to:'users#sign_in', as: :sign_in post '/sign_in', to:'users#sign_in_process' get '/sign_out', to:'users#sign_out', as: :sign_out get '/profile/edit', to:'users#edit', as: :profile_edit post '/profile/edit', to:'users#update' get '/follower_list/(:id)', to:'users#follower_list', as: :follower_list get '/follow_list/(:id)', to:'users#follow_list', as: :follow_list get '/profile/(:id)', to:'users#show', as: :profile # IDは下の方に書く resources :posts do member do get 'like', to:'posts#like', as: :like post 'comment', to:'posts#comment', as: :comment end end end

良い質問の評価を上げる

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

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

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

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

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

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

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

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

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

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

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

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

Ruby on Rails 5

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

Ruby

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