🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Action Cable

Action Cableは、WebSocketをRailsに組み込む機能。Rails4でオプションとして存在していたWebSocketをRails5で標準機能したものです。Railsアプリケーションと同様のスタイルで、Rubyを用いたリアルタイム機能を記述できます。

Devise

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

Ruby on Rails

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

Q&A

解決済

1回答

1572閲覧

imageカラムが参照できない

tagomaru025

総合スコア6

Action Cable

Action Cableは、WebSocketをRailsに組み込む機能。Rails4でオプションとして存在していたWebSocketをRails5で標準機能したものです。Railsアプリケーションと同様のスタイルで、Rubyを用いたリアルタイム機能を記述できます。

Devise

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

Ruby on Rails

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

0グッド

0クリップ

投稿2019/11/28 18:39

編集2019/11/29 22:44

Actioncable + devise でリアルタイムチャットアプリを作成しています。

チャット画面で投稿する際に以下のエラーがでてしまい、画面リロードをしないと文字が表示されなくなりました。

Finished "/cable/" [WebSocket] for 192.168.33.1 at 2019-11-29 04:22:12 +0100
RoomChannel stopped streaming from room_channel_
Started GET "/cable" for 192.168.33.1 at 2019-11-29 04:22:12 +0100
Cannot render console from 192.168.33.1! Allowed networks: 127.0.0.0/127.255.255.255, ::1
Started GET "/cable/" [WebSocket] for 192.168.33.1 at 2019-11-29 04:22:12 +0100
Successfully upgraded to WebSocket (REQUEST_METHOD: GET, HTTP_CONNECTION: Upgrade, HTTP_UPGRADE: websocket)
User Load (0.2ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? ORDER BY "users"."id" ASC LIMIT ? [["id", 1], ["LIMIT", 1]]
↳ app/channels/application_cable/connection.rb:12:in find_verified_user' User Load (0.2ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT ? [["id", 1], ["LIMIT", 1]] ↳ app/channels/application_cable/connection.rb:12:in find_verified_user'
Registered connection (Z2lkOi8vY2hhdGFwcC9Vc2VyLzE)
RoomChannel is transmitting the subscription confirmation
RoomChannel is streaming from room_channel_1
RoomChannel#speak({"message"=>"i have no idea"})
(0.1ms) begin transaction
↳ app/channels/room_channel.rb:12:in speak' User Load (0.1ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT ? [["id", 1], ["LIMIT", 1]] ↳ app/channels/room_channel.rb:12:in speak'
Room Load (0.1ms) SELECT "rooms".* FROM "rooms" WHERE "rooms"."id" = ? LIMIT ? [["id", 1], ["LIMIT", 1]]
↳ app/channels/room_channel.rb:12:in speak' Message Create (2.8ms) INSERT INTO "messages" ("content", "created_at", "updated_at", "user_id", "room_id") VALUES (?, ?, ?, ?, ?) [["content", "i have no idea"], ["created_at", "2019-11-29 03:22:23.549954"], ["updated_at", "2019-11-29 03:22:23.549954"], ["user_id", 1], ["room_id", 1]] ↳ app/channels/room_channel.rb:12:in speak'
(7.4ms) commit transaction
↳ app/channels/room_channel.rb:12:in speak' [ActiveJob] Enqueued MessageBroadcastJob (Job ID: 57f40449-6e0e-41c7-8dbc-efd67e142aac) to Async(default) with arguments: #<GlobalID:0x00007f2910d615b0 @uri=#<URI::GID gid://chatapp/Message/59>> Message Load (0.2ms) SELECT "messages".* FROM "messages" WHERE "messages"."id" = ? LIMIT ? [["id", 59], ["LIMIT", 1]] [ActiveJob] [MessageBroadcastJob] [57f40449-6e0e-41c7-8dbc-efd67e142aac] Performing MessageBroadcastJob (Job ID: 57f40449-6e0e-41c7-8dbc-efd67e142aac) from Async(default) enqueued at 2019-11-29T03:22:23Z with arguments: #<GlobalID:0x00007f2928034708 @uri=#<URI::GID gid://chatapp/Message/59>> [ActiveJob] [MessageBroadcastJob] [57f40449-6e0e-41c7-8dbc-efd67e142aac] Rendered messages/_message.html.erb (Duration: 6.9ms | Allocations: 1487) [ActiveJob] [MessageBroadcastJob] [57f40449-6e0e-41c7-8dbc-efd67e142aac] Error performing MessageBroadcastJob (Job ID: 57f40449-6e0e-41c7-8dbc-efd67e142aac) from Async(default) in 8.56ms: ActionView::Template::Error (undefined method image' for nil:NilClass):
/home/vagrant/environment/chatapp/app/views/messages/_message.html.erb:2:in _app_views_messages__message_html_erb__1902079675368871319_69907370882620' /home/vagrant/.rbenv/versions/2.6.4/lib/ruby/gems/2.6.0/gems/actionview-6.0.1/lib/action_view/base.rb:274:in _run'

ネットで調べ、controllerを変更したり、deviseの仕様についても調べましたが,解決しませんでした。

以下が関係していると感じているコードです。

rooms_controller.rb ↓

rooms_controller.rb

1 2class RoomsController < ApplicationController 3 4 def index 5 @user = current_user.id 6 @rooms = Room.all.order(:id) 7 end 8 9 def show 10 @user = User.find(params[:id]) 11 @room = Room.find(params[:id]) 12 @messages = @room.messages 13 end 14end 15 16</code> 17 18コード

routes.rb ↓

Rails.application.routes.draw

1 namespace :admin do 2 resources :users 3 end 4 5 devise_for :users, :controllers => { 6 registrations: 'users/registrations'} 7 8 9 root to: 'top#show' 10 11 resources :rooms, :only => [:index, :show] 12 13 devise_scope :user do 14 get 'users/sign_out', :to => 'users/sessions#destroy' 15 end 16 17 resources :users, :only => [:index, :show, :edit, :destroy] 18 19end 20コード

users_controller.rb ↓

class

1 before_action :authenticate_user! 2 3 def show 4 @user = current_user.id 5 end 6 7 def index 8 @user = User.find(params[:id]) 9 end 10 11 def edit 12 @user = current_user.id 13 end 14 15 def update 16 end 17 18 def destroy 19 @user = User.find(params[:id]) 20 if @user.destroy 21 redirect_to admin_users_url 22 flash[:notice] = "ユーザー#{@user.username}を削除しました。" 23 end 24 end 25 26end 27コード

rooms show.html.erb ↓

<h1>Chat room</h1> <div id='messages' data-room_id="<%= @room.id %>"> <%= render @messages %> </div> </div> <div class="send-box"> <%= text_field_tag :content, nil, data: { behavior: 'room_speaker' } %> <%= label_tag :content, 'Say something' %> </div> コード

_messages.erb ↓

<% if @user.image.present? %> <%= image_tag(@user.image.thumb100.url) %> <% else %> <%= image_tag('no-image-icon-23500.jpg', :size => '100x100') %> <% end %> <p><%= "#{message.user.email}: #{message.content}" %></p> </div> コード

schema.rb ↓

create_table

1 t.string "email", default: "", null: false 2 t.string "encrypted_password", default: "", null: false 3 t.string "reset_password_token" 4 t.datetime "reset_password_sent_at" 5 t.datetime "remember_created_at" 6 t.datetime "created_at", precision: 6, null: false 7 t.datetime "updated_at", precision: 6, null: false 8 t.string "username" 9 t.boolean "admin", default: false, null: false 10 t.text "profile" 11 t.string "image" 12 t.index ["email"], name: "index_users_on_email", unique: true 13 t.index ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true 14 end 15 16コード

rooms index.html.erb ↓

<h1><%= link_to "#{current_user.username}さんのページ", user_path(@user) %></h1> <h3>Chatroom一覧</h3> <div> <ul> <% @rooms.each do |room| %> <li><%= link_to "ROOM#{room.id}", room_path(room.id, @user.id) %></li> <% end %> </ul> </div> <h3>お気に入り</h3> <% if current_user.try(:admin?) %> <%= link_to "管理者画面", admin_users_path, class: 'btn' %> <% end %> </div> コード

schemaファイルにはimageカラムがあるのに何故エラーが出ているのでしょうか?

ご助力お願いします。

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

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

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

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

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

winterboum

2019/11/29 00:10

codeが読みにくいので、<cdoe>でくくっていただけますか エラーメッセージはその前後の情報も意味を持ちますので、それらも載せて下さい。
guest

回答1

0

ベストアンサー

<% if @user.image.present? %> の @user がnilだと言われてます
def show
@user = User.find(params[:id])
@room = Room.find(params[:id])
と同じparams[:id]でuser,roomを取り出してますが、これがおかしいですね。
paramsにuserとroomと両方のidが渡るようにして下さい

投稿2019/11/29 03:39

winterboum

総合スコア23567

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

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

tagomaru025

2019/11/29 16:32

回答ありがとうございます。 申し訳ございませんでした。2つのidを渡すとの事だったので、idをpathに追加したり、whereやfind_byを調べ、試しました。しかし、以前と変わらず、imageが取得出来ませんでした。 大変恐縮なのですが、idを2つ渡す方法を教えて頂けないでしょうか? お手を煩わせてしまい申し訳ございません。
winterboum

2019/11/29 19:39

そのviewはどれでしょう?
tagomaru025

2019/11/29 22:45

indexのviewを追記しましたので、ご確認お願いします。
winterboum

2019/11/29 23:50

room_path(room.id, @user.id) を  room_path(room.id, user_id: @user.id) として、 @user = User.find(params[:id]) を @user = User.find(params[:user_id]) に
tagomaru025

2019/11/30 17:12

すみません。 教えて頂いた方法を試したのですが、以下のエラーが出てしまいました。 undefined method `id' for 1:Integer Did you mean? i <ul> <% @rooms.each do |room| %> <li><%= link_to "ROOM#{room.id}", room_path(room.id, user_id: @user.id) %></li> <% end %> </ul> </div> 見にくくなってしまい申し訳ありません。<li>から始まる列です。 idが取れておらず、整数クラスに関係しているところまでは調べてわかったのですが、それ以上の情報が出てきませんでした。 何か解決策はあるでしょうか?
winterboum

2019/11/30 20:13

もしかして、@userはUserのインスタンスではなく、そのidをいれてますか? でしたら、 @user.id ではなく @user で。 変数名は重要です、名前を見て勘違いしないような命名を心がけて下さい
tagomaru025

2019/12/01 03:04

申し訳ございません。今後は変数名にも気を配ります。 @userで実装することが出来ました。 何度も教えて頂きまして本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問