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

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

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

GitHubは、Gitバージョン管理システムを利用したソフトウェア開発向けの共有ウェブサービスです。GitHub商用プランおよびオープンソースプロジェクト向けの無料アカウントを提供しています。

Ruby on Rails

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

2回答

803閲覧

投稿者以外はユーザー情報を編集できないようにしたい

pi-nattu

総合スコア61

GitHub

GitHubは、Gitバージョン管理システムを利用したソフトウェア開発向けの共有ウェブサービスです。GitHub商用プランおよびオープンソースプロジェクト向けの無料アカウントを提供しています。

Ruby on Rails

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2022/08/04 14:41

編集2022/08/04 14:49

前提

本のタイトルと感想を投稿できるアプリケーションを作っています。
ユーザー一覧で
◆ユーザー画像・名前・自己紹介文(introduction)・Show(投稿者の詳細ページへ飛ぶリンク)
が表示されています。

※ネットで調べてみたのですが、調べ方が悪いらしく知りたい情報にたどり着けませんでした...

実現したいこと(動作)

Showリンクを踏んだ際にユーザー情報(image,name,introduction)を編集する機能に関して、投稿者と投稿者以外のユーザーで遷移先を以下のように実装させたいです。

1.ユーザーに関する編集機能で、ユーザー一覧からリンク(Showリンク)を踏むと投稿したユーザーの詳細ページへ飛ぶ
2.投稿者なら編集リンクを踏むと投稿者自身の情報を編集が可能
3.投稿者以外ならば一旦自分(user)の詳細画面に飛び、情報を編集可能

該当のソースコード

ruby(users/show.html.erb)

1<main> 2 <h1>User info</h1> 3 <%= image_tag @user.get_profile_image(100,100) %><br> 4 <h3>name <%= @user.name %></h3> 5 <h3>introduction <%= @user.user_introduction %> </h3> 6 <% if @user.id == current_user.id? %> 7 <p><%= link_to "プロフィール編集", edit_user_path(@user) %></p> 8 <% else %> 9 <p><%= link_to "プロフィール編集", user_path(user.id) %></p> 10 <% end %> 11</main>

試したこと

2つ試してみたのですが...

Ruby

1<h3>introduction <%= @user.user_introduction %> </h3> 2 #リンク自体は表示させたいのでこれだと表示されないので別のものを使う必要がある? 3    <% if @user.id == current_user.id? %> 4 <p><%= link_to "プロフィール編集", edit_user_path(@user) %></p> 5 <% else %> 6 7 ②<h3>introduction <%= @user.user_introduction %> </h3> 8 #ログインユーザーなら誰でも編集できてしまうが、この辺りを変えれば実装したいものができる? 9 <% if user_signed_in? %> 10 <p><%= link_to "プロフィール編集", edit_user_path(@user) %></p> 11 <% else %> 12

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

Ruby on Rails3.1.2

ruby(route)

1Rails.application.routes.draw do 2 get 'homes/about', to: 'homes#show', as: :about 3 post 'books/book.id' => 'books#create' 4 devise_for :users 5 root to: "homes#top" 6 resources :books, only: [:show, :edit, :index, :create, :destroy] 7 resources :users, only: [:show, :edit, :index, :update] 8 # For details on the DSL available within this file, see https://guides.rubyonrails.org/routing.html 9end

ruby(users_controller)

1class UsersController < ApplicationController 2 def show 3 @user = User.find(params[:id]) 4 @books = @user.books 5 end 6 7 def edit 8 @user = User.find(params[:id]) 9 end 10 11 def index 12 @users = User.all 13 end 14 15 def update 16 @user = User.find(params[:id]) 17 @user.update(user_params) 18 redirect_to user_path 19 end 20 21 private 22 23 def user_params 24 params.require(:user).permit(:name, :profile_image, :user_introduction) 25 end 26 27end 28

ruby(users_table)

1create_table "users", force: :cascade do |t| 2 t.string "email", default: "", null: false 3 t.string "encrypted_password", default: "", null: false 4 t.string "reset_password_token" 5 t.datetime "reset_password_sent_at" 6 t.datetime "remember_created_at" 7 t.string "name" 8 t.datetime "created_at", precision: 6, null: false 9 t.datetime "updated_at", precision: 6, null: false 10 t.text "user_introduction" 11 t.index ["email"], name: "index_users_on_email", unique: true 12 t.index ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true 13 end

ruby(users/index.html.erb)

1 <main> 2 <h2>Users</h2> 3 <% @users.each do |user| %> 4 <p>image</p><br><%= image_tag user.get_profile_image(100,100) %> 5 <p>name <br><%= user.name %></p><br><%= link_to "Show", user_path(user.id) %> 6 <% end %> 7 </main>

ruby(users/edit.html.erb)

1<h1>User info</h1> 2<%= form_with model: @user do |f| %> 3 <label for="inputName">Name</label><br><%= f.text_field :name, autfocus: true, id:"inputName" %><br> 4 <label for="inputImage">Image</label><br><%= f.file_field :profile_image, placeholder:"プロフィール画像", accept:"image/*" %><br> 5 <label for="inputIntroduction">Introduction</label><br><%= f.text_area :user_introduction, autfocus: true, id:"inputIntroduction" %><br> 6 <%= f.submit "Update User" %> 7<% end %>

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

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

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

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

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

guest

回答2

0

ベストアンサー

link_to_ifというのがあります。

投稿2022/08/04 22:58

winterboum

総合スコア23329

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

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

pi-nattu

2022/08/05 09:15

朝早くからのご回答ありがとうございます! このような記述方法があるんですね。トライしてみます!
pi-nattu

2022/08/07 08:50 編集

やっとプログラミンする時間がとれまして、アドバイスを実行する前にもう一度だけカリキュラムを見直してみたら <h3>introduction <%= @user.user_introduction %></h3> <% if @user == current_user.id %> <p><%= link_to "プロフィール編集", edit_user_path(@user) %></p> <% else %> <% user_path(current_user.id) %> <% end %> <p><%= link_to "プロフィール編集", edit_user_path(@user) %></p> で想定していた動きのものができました。 自己解決してしまったのですが、winterboum様からアドバイスでいただいたlink_to_ifがあるということを知ることができて勉強になりました! 別の機会に参考にさせていただくかと思います。 改めてご回答ありがとうございました! ※追記 このコード間違っていたので自己解決のところに書きました。
guest

0

ruby(users/show.html.erb)

1<main> 2 <h1>User info</h1> 3 <%= image_tag @user.get_profile_image(100,100) %><br> 4 <h3>name <%= @user.name %></h3> 5 <h3>introduction <%= @user.user_introduction %></h3> 6 <p><%= link_to "プロフィール編集", edit_user_path(@user) %></p>

ruby(users_controller.rb)

1 before_action :correct_user, only: [:edit, :update] 2 3def correct_user 4 user = User.find(params[:id]) 5 if current_user.id != user.id 6 redirect_to user_path(current_user.id) 7 end 8 end

自己解決したのですが、前回のものは間違えていたので改めて正しい記述を載せています。
before_actionでEditとUpdateのアクションに限って、実行する前にifと!=で投稿者のユーザーidと現在のログインユーザーのidが違っているか比較し、違っていたら現在ログインしているユーザーの詳細へ飛び、編集可能にする。
といった流れのようです(備忘録として動きを自分なりに書いてます。もしかしたら間違っているかも)

投稿2022/08/07 03:08

編集2022/08/07 08:49
pi-nattu

総合スコア61

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問