私は他のSOの投稿を見てきましたが、なぜこのエラーメッセージがポップアップしているのかわかりません。私はページで各トレーニングのためにレンダリングされる私のworkout
モデルのために_template.html.erb
パーシャルを持っています。Rubyエラー:未定義メソッド `name 'for nil:NilClass
workouts#index
ページにアクセスしようとすると、@workout.name
と部分的にハイライト表示されているエラーが表示されます。完全な部分は次のとおりです。
<div class="container col-sm-6 col-md-4">
<div class="card hoverable">
<div class="card-image">
<div class="view overlay hm-white-slight z-depth-1">
<%#= link_to workout.workout_img class: "img-responsive" alt: "" %>
<div class="mask waves-effect"></div>
</div>
<span class="card-title"><%= @workout.name %></span>
</div>
<div class="card-content">
<p><strong>Workout Type: </strong><%= @workout.workout_type %></p>
<p><strong>Goal: </strong><%= @workout.teaser %></p>
<p><%= @workout.description %></p>
</div>
<div class="card-action">
<a class="red-text"><%= @workout.video %></a>
</div>
</div>
</div>
マイworkouts#index
ページをレンダリングするために、これを使用して、部分:
<%= @workouts.each do |w| %>
<%= render "workouts/template" %>
<% end %>
マイワークアウトモデルがちょうど完全を期すため、私は、これは物事をどのように影響するかが表示されない(が、日本酒):
class Workout < ActiveRecord::Base
belongs_to :user
has_many :exercises
end
マイワークアウトコントローラは次のとおりです。
class WorkoutsController < ApplicationController
def index
@workouts = Workout.all
end
def show
@workout = Workout.find(params[:id])
end
def new
@workout = Workout.new
end
def create
@workout = Workout.new
@workout.name = params[:workout][:name]
@workout.workout_type = params[:workout][:workout_type]
@workout.teaser = params[:workout][:teaser]
@workout.description = params[:workout][:description]
@workout.video = params[:workout][:video]
@workout.difficulty = params[:workout][:difficulty]
@workout.trainer = params[:workout][:trainer]
@workout.user_id = params[:workout][:user_id]
if @workout.save
flash[:notice] = "Workout was saved successfully."
redirect_to @workout
else
flash.now[:alert] = "Error creating workout. Please try again."
render :new
end
end
def edit
@workout = Workout.find(params[:id])
end
def update
@workout = Workout.find(params[:id])
@workout.name = params[:workout][:name]
@workout.workout_type = params[:workout][:workout_type]
@workout.teaser = params[:workout][:teaser]
@workout.description = params[:workout][:description]
@workout.video = params[:workout][:video]
@workout.difficulty = params[:workout][:difficulty]
@workout.trainer = params[:workout][:trainer]
@workout.user_id = params[:workout][:user_id]
if @workout.save
flash[:notice] = "Workout was updated successfully."
redirect_to @workout
else
flash.now[:alert] = "Error saving workout. Please try again."
render :edit
end
end
def destroy
@workout = Workout.find(params[:id])
if @workout.destroy
flash[:notice] = "\"#{@workout.name}\" was deleted successfully."
redirect_to action: :index
else
flash.now[:alert] = "There was an error deleting the workout."
render :show
end
end
end
最後に、私は@workout.name
を最初に試しましたが、undefined local variable or method 'workout' for #<#<Class:0x007fe1aa3ace68>:0x007fe1b4babdf8>
というエラーが発生しました。この問題は解決しないと思います。
ご協力いただきましてありがとうございます。
優秀!ありがとうございました! – Liz