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

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

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

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

Ruby on Rails

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

Q&A

解決済

1回答

642閲覧

複数モデルで画面の表示切り替えについて

nika_nika

総合スコア38

Devise

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

Ruby on Rails

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

0グッド

0クリップ

投稿2020/12/09 07:01

編集2020/12/09 08:10

前提・実現したいこと

railsを使用し、ポートフォリオを作成中です。
userモデルと、companyモデルを作成しており、companyのみに記事が登録できるページへ遷移できる「ボタン」を表示させたいと思っています。
調べて自分なりにやってみましたが、userにも表示されてしまいます。
基礎的な所ですが、ご教示お願いします!

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

userにも新規記事登録ボタンが表示される

該当のソースコード

views>articles>_article.html.erb

<%= link_to article_path(article) do %> <div class="card"> <% if article.eyecatch.attached? %> <div class="card_image"> <%= image_tag article.eyecatch %> </div> <% end %> <div class="card_content"> <div class="card_title"> <%= article.title %> </div> <div class="card_detail"> <div> <p><%= article.company.display_name %></p> <p><%= article.display_created_at %></p> </div> </div> </div> </div> <% if company_signed_in? %> <div class="card_heart"> <%= image_tag 'heart.svg' %> <span><%= article.like_count %></span> </div> <% end %> <% end %>

models>user.rb

class User < ApplicationRecord # Include default devise modules. Others available are: # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable devise :database_authenticatable, :registerable, :recoverable, :rememberable, :validatable has_many :likes, dependent: :destroy has_many :favorite_articles, through: :likes, source: :article has_one :profile, dependent: :destroy delegate :birthday, :age, :gender, to: :profile, allow_nil: true def has_liked?(article) likes.exists?(article_id: article.id) end def display_name profile&.nickname || self.email.split('@').first end def prepare_profile profile || build_profile end def avatar_image if profile&.avatar&.attached? profile.avatar else 'default-avatar.png' end end end

model.company.rb

class Company < ApplicationRecord # Include default devise modules. Others available are: # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable devise :database_authenticatable, :registerable, :recoverable, :rememberable, :validatable has_many :articles, dependent: :destroy def has_written?(article) articles.exists?(id: article.id) end def display_name self.email.split('@').first end end

試したこと

if文を使いcompany_signed_in?やcurrent_companyで試しましたができませんでした。

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

Ruby2.7.1
rails6.0.3

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

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

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

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

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

m.ts10806

2020/12/09 07:57

コードが端すぎて全体像が見えないのですけど、 そのときUserはどういう状態なのでしょう。 できればコードも全体像が分かる程度にご提示ください。 特に定義は提示されないと何も見えてきません。
nika_nika

2020/12/09 08:14

追記・修正依頼ありがとうございます。 確かに全体像がわからなければ回答できないですね。 教えてくださりありがとうございます! 定義というと、userのmodelの中身で記述されてるものでしょうか? 不勉強で申し訳ありません
m.ts10806

2020/12/09 08:16

おおよそModelのものとconfigのものは「定義」ですね。
nika_nika

2020/12/09 08:51

ありがとうございます!
neko_daisuki

2020/12/09 14:50

ボタンを表示させたいcompanyのページを開いた時と、ボタンを表示させたくないuserのページを開いた時の、 ブラウザのアドレスバーに表示されているURLを張り付けてください。 それから、config/routes.rb も追記してください。 そうすれば、どのviewを見れば良いのかこちらで判断できると思います。
guest

回答1

0

自己解決

view>commons>_article

<%= link_to article_path(article) do %> <div class="card"> <% if article.eyecatch.attached? %> <div class="card_image"> <%= image_tag article.eyecatch %> </div> <% end %> <div class="card_content"> <div class="card_title"> <%= article.title %> </div> <div class="card_detail"> <div> <p><%= article.company.display_name %></p> <p><%= article.display_created_at %></p> </div> </div> </div> <div class="card_detail"> <%= image_tag article.company.avatar_image %> <div> <p><%= article.company.display_name %></p> </div> </div> <div class="card_heart"> <%= image_tag 'heart.svg' %> <span><%= article.like_count %></span> </div> </div> <% end %>

view>commons>_articles

<div class="container"> <% articles.each do |article| %> <%= render 'commons/article', article: article %> <% end %> </div>

view>articles>index.html.erb

<%= render 'commons/articles', articles: @articles %> <% if company_signed_in?%> <%= link_to new_article_path do %> <div class="float_btn"> <i class="fa fa-plus"></i> </div> <% end %> <% end %>

view>articles>index.html.erbの部分でif文使って解決できました。
情報が曖昧で回答者にご迷惑をお掛けしました。すいませんm(_ _)m。ありがとうございました!

投稿2020/12/15 09:57

nika_nika

総合スコア38

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問