railsチュートリアルを終えて、下記を参考にメッセージ機能を追加しようとしました。
https://qiita.com/YN6127yn/items/7ddd966141cca195b4da
しかし、メッセージのデータがないのでメッセージが出力されないのは分かるのですが、<div class="message_form">で定義されるメッセージフォームもapp/views/users/show.html.erbに出力されません。
<aside class="col-md-4"> <!-- 省略 --> <% if !current_user?(@user) && logged_in? %> <section class="message_box"> <div id="messages"> <%= render @messages %> </div> </section> <script type="text/javascript"> var height = 0; $("div.message").each( function() { height += ($(this).height()); }); $('section.message_box').scrollTop(height); </script> <div class="message_form"> <%= render 'messages/message_form', {from_user: current_user, to_user: @user, room_id: @room_id} %> </div> <% end %> </aside>
<% if !current_user?(@user) && logged_in? %>の箇所のif文が気になっています。
カレントユーザーではない、かつログインしていると読み取れてしまします。もしそうであれば他人じゃなければ上記viewが出力されなくなってしまいます。
出力する検証をするため、<% if !current_user?(@user) && logged_in? %>の箇所の!を取ったり、!current_user?(@user) &&ごと削除すると、下記エラーが発生してしまいます。
undefined method `identifier' for nil:NilClass
実際は、viewに何も出力されていないのですが原因が分かりません。
コントローラーで影響がありそうなコードも記載いたします。
●users.controller.rb
def messages @user = User.find(params[:id]) @room_id = message_room_id(current_user, @user) @messages = Message.recent_in_room(@room_id) end
モデルで影響のありそうなコードを記載済ます。
●models/message.rb
def Message.recent_in_room(room_id) where(room_id: room_id).last(500) end
もし、お分かりの方がいらっしゃいましたら教えて頂ければ幸いです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/07/30 10:02
2018/07/30 10:05
2018/07/30 10:14
2018/07/30 10:27