NoMethodError in ***Controller#show
undefined method `***’ for nil:NilClass
Extracted source (around line #30):
28 29 30 31 32 33 |
def show
@macs = @user.macs.page(params[:page]).per(8)
end
def update
|
ハマってしまったので、同じことを繰り返さないために。
経緯
<span class="btn-sticky">すべての更新、作成日時を表示,非表示</span> <% if @user.macs.any? %> <% @user.macs.each do |mac| %> <section class="panel"> <div class="panel-left"> <h2>目標:<%= mac.measurable %></h2> <h2>ゴールまでのプロセス<br><%= mac.actionable %></h2> <h2>目標達成が価値観に基づいているか?<br><%= mac.competent %></h2> <li><h3>更新日時:<%= mac.updated_at.to_s(:datetime_jp) %></h3> <h3>作成日時:<%= mac.created_at.to_s(:datetime_jp) %></h3></li> </ul> </div> <div class="panel-right"> <%= link_to(content_tag(:i, '', class: "fas fa-trash-alt fa-3x faa-horizontal animated-hover fa-pull-right", style: "color: rgb(80,80,80);"), mac_path(mac.id), method: :delete, data: {confirm: "本当に削除しますか?"}) %> <%= link_to(content_tag(:i, '', class: "fas fa-edit fa-3x faa-vertical animated-hover fa-pull-right", style: "color: rgb(80,80,80);"), edit_mac_path(mac.id)) %> </section> <% end %> <% end %> <%= render 'shared/script' %>
user_idに紐付いたmacモデルのもの(:measurable, :actionable, :competent)を繰り返しで表示させたかった。
原因
***_controller.rb
def show @macs = @user.macs.page(params[:page]).per(8) end
@userをmacs_controller.rbに定義していなかったためnilになった。
機能がほぼ同じだったので他のコントローラーからコピペしたせいで
リファクタリングでprivate にあった@user = User.find(params[:id])
を見落としていたため。
解決法
***_controller.rb
def show @user = User.find(params[:id]) @macs = @user.macs.page(params[:page]).per(8) end
@user = User.find(params[:id])