###現状
現在rails tutorial13章マイクロポストの描画を勉強中です。
ユーザーのmicropostを一覧で表示させようとしたところ、タイトルの
'nil' is not an ActiveModel-compatible object. It must implement :to_partial_path.
というエラーがサーバーに表示されました。
###エラーコード
エラーはapp/views/users/show.html.erbファイルの15行目、
<%= render @microposts %>
の行で起きているようでした。
<% provide(:title, @user.name) %> <div class="row"> <aside class="col-md-4"> <section class="user_info"> <h1> <%= gravatar_for @user %> <%= @user.name %> </h1> </section> </aside> <div class="col-md-8"> <% if @user.microposts.any? %> <h3>Microposts (<%= @user.microposts.count %>)</h3> <ol class="microposts"> <%= render @microposts %> </ol> <%= will_paginate @microposts %> <% end %> </div> </div>
@micropostはusers_controller内のshowアクションで定義しています。
def show @user = User.find(params[:id]) @microposts = @user.microposts.paginate(page: params[:page]) end
###試したこと
ネットで似た状況の質問を見ていると、@micropostsに値が渡されていないことが
原因だった場合が多く、また部分テンプレートへのパスを直接指定するために
show.html.erbをunlessを使い以下のように書き換えました。
<% provide(:title, @user.name) %> ~略~ <ol class="microposts"> <% unless @microposts.blank? %> <%= render partial: "microposts/micropost", locals: { microposts: micropost.content }%> <%end%> </ol> <% unless @microposts.blank? %> <%= will_paginate @microposts %> <%end%> <% end %> </div> </div>
このようにユーザー名、ユーザーのマイクロポスト数は表示されており、変数に値自体は入っているように思えます。
サーバーのログを載せておきます。
app/views/users/show.html.erb:15:in `_app_views_users_show_html_erb__2336219684752338369_70290005700780' Started GET "/users/1" for 106.172.115.46 at 2019-10-27 12:51:29 +0000 Cannot render console from 106.172.115.46! Allowed networks: 127.0.0.1, 127.0.0.0/127.255.255.255, ::1 Processing by UsersController#show as HTML Parameters: {"id"=>"1"} User Load (0.2ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT ? [["id", 1], ["LIMIT", 1]] Rendering users/show.html.erb within layouts/application Micropost Exists (0.1ms) SELECT 1 AS one FROM "microposts" WHERE "microposts"."user_id" = ? LIMIT ? [["user_id", 1], ["LIMIT", 1]] (0.1ms) SELECT COUNT(*) FROM "microposts" WHERE "microposts"."user_id" = ? [["user_id", 1]] Rendered users/show.html.erb within layouts/application (3.2ms) Rendered layouts/_shim.html.erb (0.3ms) User Load (0.2ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT ? [["id", 1], ["LIMIT", 1]] Rendered layouts/_header.html.erb (1.9ms) Rendered layouts/_footer.html.erb (0.3ms) Completed 200 OK in 50ms (Views: 47.2ms | ActiveRecord: 0.6ms)
このような状況ですが、どこに原因があると考えられるでしょうか。
ご回答、よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/10/28 01:42