提问人:user3457760 提问时间:7/21/2014 最后编辑:varduser3457760 更新时间:1/6/2016 访问量:983
未定义的局部变量或方法
undefined local variable or method
问:
我正在尝试显示我保存到数据库中的项目,但出现错误
未定义的局部变量或方法
这是我的控制器:
class YogasController < ApplicationController
before_action :authenticate_user!, :except => [:index, :show]
def index
@yoga = Yoga.all
end
def create
@yoga = Yoga.new(yoga_params)
if @yoga.save
redirect_to yogas_path
else
render action: 'new'
end
end
def update
@yoga = Yoga.find(params[:id])
@yoga = Yoga.update(yoga_params)
redirect_to root_path
end
def new
@yoga = Yoga.new
end
def show
@yoga = Yoga.find(params[:id])
end
def edit
@yoga = Yoga.find(params[:id])
end
def destroy
@yoga = Yoga.find(params[:id])
@yoga.destroy
redirect_to root_path
end
private
def yoga_params
params.require(:yoga).permit(:post, :title)
end
end
这是show:.html.erb:
<%= yoga.title %>
<%= yoga.post %>
以下是路线:
Rails.application.routes.draw do
resources :yogas
devise_for :users
get 'show' => 'yogs#show'
root 'yogas#index'
end
这是我在schema.rb中的内容:
create_table "yogas", force: true do |t|
t.string "title"
t.string "post"
t.datetime "created_at"
t.datetime "updated_at"
end
它保存到数据库并在创建后重定向到根路径,仅此而已。我做错了什么?
答:
3赞
Pavan
7/21/2014
#1
未定义的局部变量或方法“Yoga”
该错误是因为您使用的是 .您的代码应如下所示yoga
@yoga
show.html.erb
<%= @yoga.title %>
<%= @yoga.post %>
因为您在控制器中定义了实例变量。@yoga
show method
而且,正如 @Iceman 所指出的,你方法中的这一行应该是这样的,而你方法中的这一行应该是@yoga = Yoga.update(yoga_params)
update
@yoga = @yoga.update(yoga_params)
get 'show' => 'yogs#show'
routes
get 'show' => 'yogas#show'
评论
0赞
Eyeslandic
7/21/2014
@yoga = Yoga.update(yoga_params)
也应该是 。routes.rb 看起来也有点奇怪,@yoga = @yoga.update(yoga_params)
get 'show' => 'yogs#show'
0赞
user3457760
7/21/2014
该死的..我非常感谢这个答案,当事情这么简单时,它让我发疯。感谢您抽出宝贵时间!
评论