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

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

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

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

Ruby on Rails

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

HTML

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

解決済

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

pi-nattu
pi-nattu

総合スコア47

GitHub

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

Ruby on Rails

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

HTML

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

2回答

0リアクション

0クリップ

295閲覧

投稿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)

<main> <h1>User info</h1> <%= image_tag @user.get_profile_image(100,100) %><br> <h3>name <%= @user.name %></h3> <h3>introduction <%= @user.user_introduction %> </h3> <% if @user.id == current_user.id? %> <p><%= link_to "プロフィール編集", edit_user_path(@user) %></p> <% else %> <p><%= link_to "プロフィール編集", user_path(user.id) %></p> <% end %> </main>

試したこと

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

Ruby

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

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

Ruby on Rails3.1.2

ruby(route)

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

ruby(users_controller)

class UsersController < ApplicationController def show @user = User.find(params[:id]) @books = @user.books end def edit @user = User.find(params[:id]) end def index @users = User.all end def update @user = User.find(params[:id]) @user.update(user_params) redirect_to user_path end private def user_params params.require(:user).permit(:name, :profile_image, :user_introduction) end end

ruby(users_table)

create_table "users", force: :cascade do |t| t.string "email", default: "", null: false t.string "encrypted_password", default: "", null: false t.string "reset_password_token" t.datetime "reset_password_sent_at" t.datetime "remember_created_at" t.string "name" t.datetime "created_at", precision: 6, null: false t.datetime "updated_at", precision: 6, null: false t.text "user_introduction" t.index ["email"], name: "index_users_on_email", unique: true t.index ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true end

ruby(users/index.html.erb)

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

ruby(users/edit.html.erb)

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

以下のような質問にはリアクションをつけましょう

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

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

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

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

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

GitHub

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

Ruby on Rails

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

HTML

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