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

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

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

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

Ruby on Rails 6

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

解決済

ヘッダー内容を条件分岐で変えたい

AKIRA0310
AKIRA0310

総合スコア15

Ruby

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

Ruby on Rails 6

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

1回答

0評価

0クリップ

114閲覧

投稿2022/05/01 18:12

編集2022/05/02 14:19

前提・実現したいこと

表示させるヘッダーを条件分岐によって変えたい。
または1つのヘッダー内容を条件分岐によって変えたい。

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

ActionView::MissingTemplate in Profiles#index
Missing partial shered/_header2 with {:locale=>[:en], :formats=>[:html], :variants=>[], :handlers=>[:raw, :erb, :html, :builder, :ruby, :jbuilder]}. Searched in:

  • "/projects/kiite-proto1/app/views"
    • "/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/devise-4.8.1/app/views"
    • "/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/actiontext-6.0.4.8/app/views"
    • "/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/actionmailbox-6.0.4.8/app/views"

Extracted source (around line #4):
<%= render "shared/header" %>
<% else %>
<%= render "shered/header2" %>
<% end %>

<div class='main'>

ruby

<% if user_signed_in? %> <li><%= link_to 'ログアウト', destroy_user_session_path, method: :delete, class: "logout" %></li> <li><%= link_to 'プロフィール登録', new_profile_path, class: "registration-profile" %></li> <li><%= link_to 'マイプロフィール', profile_path(current_user.id), class: "my-profile" %></li> <% else %> <li><%= link_to 'ログイン', new_user_session_path, class: "login" %></li> <li><%= link_to '新規登録', new_user_registration_path, class: "sign-up" %></li> <% end %>

ログイン状態かつプロフィール情報があればマイプロフィールへのリンクを表示
ログイン状態かつプロフィール情報がなければプロフィール登録へのリンクを表示
という条件分岐をしたいのですが、良い表記方法がわかりません。
色々試しましたが、IDの取得ができなかったり、ノーメソッドエラーが起きてしまいます。

該当のソースコード

routes.rb

ruby

Rails.application.routes.draw do devise_for :users root to: "profiles#index" resources :profiles do resources :favorites, only: [:create, :destroy] resources :ratings, only: [:new, :create, :edit, :update] end resources :users, only: [:edit, :update] do get :favorites, on: :collection end resources :messages, only: [:create] resources :rooms, only: [:create, :show] resources :tags do get "profiles", to: "profiles#search" end end

user.rb

ruby

class User < ApplicationRecord # Include default devise modules. Others available are: # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable devise :database_authenticatable, :registerable, :recoverable, :rememberable, :validatable has_one :profile has_many :favorites, dependent: :destroy has_many :ratings, dependent: :destroy end

profile.rb

ruby

class Profile < ApplicationRecord mount_uploader :image, ImageUploader belongs_to :user has_many :room_users, dependent: :destroy has_many :rooms, through: :room_users has_many :messages, dependent: :destroy has_many :profile_tags, dependent: :destroy has_many :tags, through: :profile_tags has_many :favorites, dependent: :destroy has_many :ratings, dependent: :destroy validates :nickname, presence: true def save_tag(sent_tags) current_tags = self.tags.pluck(:tag_name) unless self.tags.nil? old_tags = current_tags - sent_tags new_tags = sent_tags - current_tags old_tags.each do |old| self.tags.delete Tag.find_by(tag_name: old) end new_tags.each do |new| new_profile_tag = Tag.find_or_create_by(tag_name: new) self.tags << new_profile_tag end end end

profile/index.html.erb

ruby

<% if @profiles.find_by(user_id: current_user.id).nil? %> <%= render "shared/header" %> <% else %> <%= render "shered/header2" %> <% end %>

__header.html.erb

ruby

<div class='nav'> <ul class='lists-right'> <% if user_signed_in? %> <li><%= link_to 'ログアウト', destroy_user_session_path, method: :delete, class: "logout" %></li> <li><%= link_to 'プロフィール登録', new_profile_path, class: "registration-profile" %></li> <% else %> <li><%= link_to 'ログイン', new_user_session_path, class: "login" %></li> <li><%= link_to '新規登録', new_user_registration_path, class: "sign-up" %></li> <% end %> </ul> </div>

_header2.html.erb

ruby

<div class='nav'> <ul class='lists-right'> <% if user_signed_in? %> <li><%= link_to 'ログアウト', destroy_user_session_path, method: :delete, class: "logout" %></li> <li><%= link_to 'マイプロフィール', profile_path(current_user.id), class: "my-profile" %></li> <% else %> <li><%= link_to 'ログイン', new_user_session_path, class: "login" %></li> <li><%= link_to '新規登録', new_user_registration_path, class: "sign-up" %></li> <% end %> </ul> </div>

自分で調べたことや試したこと

ヘッダー内で条件分岐をするパターンと、ヘッダーを2つ用意して条件分岐によって表示するヘッダーを変えるパターンを試しましたが上手くいきません。どなたか良い表記方法をご教授いただければ幸いです。

良い質問の評価を上げる

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

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

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

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

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

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

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

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

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

winterboum

2022/05/01 22:42

エラーは翻訳しないで、エラーメッセージを載せてください。編集しないでね。 それと、 「ログイン状態かつプロフィール情報があればマイプロフィールへのリンクを表示 ログイン状態かつプロフィール情報がなければプロフィール登録へのリンクを表示 」 は ログイン状態 と プロフィール情報存在 の組み合わせのうち、半分しか定義していません。 残りはどうするのですか?
AKIRA0310

2022/05/02 01:42

エラーメッセージと条件分岐のコードを追加いたしました。 未ログインの時は新規登録とログインのリンクを表示します。
winterboum

2022/05/02 02:39

画像では潰れて読めないのでtextで貼ってください

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

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

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

Ruby

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

Ruby on Rails 6

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