前提・実現したいこと
<エラーが出るまでの背景>
〇connectionsテーブルのauthorityカラムの値を得るために
Connectionオブジェクト.authorityとしたがundefined method...というエラーになる
<開発環境>
awsのcloud9でrubyonrailsを利用してweleveという名前のwebアプリケーションを開発しています。
DBはMySQLを利用しています。
発生している問題・エラーメッセージ
NoMethodError in GroupsController#show undefined method `authority' for #<Connection::ActiveRecord_Relation:0x0000000005dec9e8> Extracted source (around line #7):
該当のソースコード
groups_controller.rb
def show @conne=Connection.where(student_id: current_student.id) if current_student.groups.present?&&@conne.authority # もし生徒がグループアカウントに紐づけられてて、かつauthorityがtrueなら # プロフィールアイコンから自分のグループページへ @group=current_student.groups # @group.idだとエラー @group.idsにする @events=Event.where(group_id: @group.ids).order("created_at DESC").page(params[:page]).per(3) else # 普通にグループページを見るとき @group=Group.find(params[:id]) @events=Event.where(group_id: @group.id).order("created_at DESC").page(params[:page]).per(3) end @today=Date.today end
試したこと
〇@conneがnilではないか⇒デバック(binding.pryと記入)で検証
5: def show
6: @conne=Connection.where(student_id: current_student.id)
=> 7: binding.pry
8: if current_student.groups.present?&&@conne.authority
9: # もし生徒がグループアカウントに紐づけられてて、かつauthorityがtrueなら
10: # プロフィールアイコンから自分のグループページを見るとき
11: @group=current_student.groups
12: # @group.idだとエラー @group.idsにする
13: @events=Event.where(group_id: @group.ids).order("created_at DESC").page(params[:page]).per(3)
14: else
15: # 普通にグループページを見るとき
16: @group=Group.find(params[:id])
17: @events=Event.where(group_id: @group.id).order("created_at DESC").page(params[:page]).per(3)
18: end
19:
20: @today=Date.today
21:
22: end
[1] pry(#<GroupsController>)> @conne
Connection Load (0.3ms) SELECT connections
.* FROM connections
WHERE connections
.student_id
= 1
↳ app/controllers/groups_controller.rb:7
=> [#<Connection:0x0000000003f26e78 id: 2, student_id: 1, group_id: 1, created_at: nil, updated_at: Sun, 15 Mar 2020 11:05:35 UTC +00:00, authority: true>]
[2] pry(#<GroupsController>)> @conne.authority
NoMethodError: undefined method authority' for #<Connection::ActiveRecord_Relation:0x00000000043ad7f8> from /home/ec2-user/.rvm/gems/ruby-2.5.1/gems/activerecord-5.2.4.1/lib/active_record/relation/delegation.rb:125:in
method_missing'
[3] pry(#<GroupsController>)>
@conneがnilなのかと思い、デバックしてみたのですが、@conneにはConnectionクラスのインスタンス(connectionsテーブルのカラム)が代入されているようです。
〇サーバーが起動していない状態でrails c としてauthorityメソッドが使えるか検証
ec2-user:~/environment/weleve (master) $ rails c
Running via Spring preloader in process 5948
Loading development environment (Rails 5.2.4.1)
[1] pry(main)> conne=Connection.find(2)
(0.3ms) SET NAMES utf8, @@SESSION.sql_mode = CONCAT(CONCAT(@@sql_mode, ',STRICT_ALL_TABLES'), ',NO_AUTO_VALUE_ON_ZERO'), @@SESSION.sql_auto_is_null = 0, @@SESSION.wait_timeout = 2147483
Connection Load (0.2ms) SELECT connections
.* FROM connections
WHERE connections
.id
= 2 LIMIT 1
=> #<Connection:0x00000000059c28e0 id: 2, student_id: 1, group_id: 1, created_at: nil, updated_at: Sun, 15 Mar 2020 11:05:35 UTC +00:00, authority: true>
[2] pry(main)> conne.authority
=> true
となり、undefined method...というエラーにはなりません。
補足情報(FW/ツールのバージョンなど)
いろいろ調べてみたのですが全く解決できそうにないので質問させていただきました。どなたがご教授いただけると幸いです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/03/17 11:00