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

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

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

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

Ruby on Rails 6

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

受付中

Rails modelに定義したメソッドが認識されない件

nobita
nobita

総合スコア55

Ruby

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

Ruby on Rails 6

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

2回答

0評価

0クリップ

212閲覧

投稿2022/01/22 12:01

お世話になっております。

現在Railsの勉強を パーフェクト RubyonRailsという書籍を使って勉強をしております。
その書籍を勉強中にどうしてもうまくいかない部分があったので、質問させてください。
ページ数でいうと、 6章の320ページで、イベントシステムの詳細ページにイベントを作ったユーザーがアクセスした際に編集ボタンを表示するという部分になります。

[システム概要]
ユーザーが イベント情報を投稿できるシステム

モデルのコード下記に、created_by?のメソッドを作成しました。

event.rb

class Event < ApplicationRecord belongs_to :owner, class_name: "User" validates :name, length: {maximum: 50}, presence: true validates :place, length: {maximum: 100}, presence: true validates :content, length: {maximum: 2000}, presence: true validates :start_at, presence: true validates :end_at, presence: true validates :start_at_should_be_before_end_at def created_by?(user) return false unless user owner_id == user.id end private def start_at_should_be_before_end_at return unless start_at && end_at if start_at >= end_at errors.add(:start_at, "は終了時間よりも前に設定してください") end end end

events/show.html.haml

%h1.mt-3.mb-3= @event.name .row .col-8 .card.mb-2 %h5.card-header イベント内容 .card-body %p.card-text= @event.content .card.mb-2 %h5.card-header 開催時間 .card-body %p.card-text= "#{l(@event.start_at, format: :long)} - #{l(@event.end_at, format: :long)}" .card.mb-2 %h5.card-header 開催場所 .card-body %p.card-text= @event.place .card.mb-2 %h5.card-header 主催者 .card-body = link_to("https://github.com/#{@event.owner.name}", class: "card-link") do = image_tag @event.owner.image_url, width: 50, height: 50 = "@#{@event.owner.name}" .col-4 - if @event.created_by?(current_user) < --------- ここでevent.rbで定義したメソッドを使いたい. = link_to("イベントを編集する", edit_event_path(@event), class: "btn btn-info btn-lg btn-block") -# - if @event.owner.id == current_user.id = link_to("イベントを編集する", edit_event_path(@event), class: "btn btn-info btn-lg btn-block")

上記のコードで bin/rails s をして、作成したイベントの詳細にアクセスすると、

NoMethodError in Events#show
となり、

イメージ説明

といったエラーになってしまいます.

[ためしたこと]
dbを一度作り直したり..してみたのですが、ダメでした。

よろしくお願いいたします。

良い質問の評価を上げる

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

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

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

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

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

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

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

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

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

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

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

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

Ruby

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

Ruby on Rails 6

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