未定义的局部变量或方法

undefined local variable or method

提问人:user3457760 提问时间:7/21/2014 最后编辑:varduser3457760 更新时间:1/6/2016 访问量:983

问:

我正在尝试显示我保存到数据库中的项目,但出现错误

未定义的局部变量或方法

这是我的控制器:

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

它保存到数据库并在创建后重定向到根路径,仅此而已。我做错了什么?

Ruby-on-Rails 红宝石 控制器

评论

0赞 Eyeslandic 7/21/2014
你在哪一行得到这个错误?
1赞 Uri Agassi 7/21/2014
错误到底是什么?
0赞 user3457760 7/21/2014
未定义的局部变量或方法“Yoga”/show.html.erb,其中行 #3 引发:

答:

3赞 Pavan 7/21/2014 #1

未定义的局部变量或方法“Yoga”

该错误是因为您使用的是 .您的代码应如下所示yoga@yogashow.html.erb

<%= @yoga.title %>
<%= @yoga.post %>

因为您在控制器中定义了实例变量。@yogashow method

而且,正如 @Iceman 所指出的,你方法中的这一行应该是这样的,而你方法中的这一行应该是@yoga = Yoga.update(yoga_params)update@yoga = @yoga.update(yoga_params)get 'show' => 'yogs#show'routesget '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
该死的..我非常感谢这个答案,当事情这么简单时,它让我发疯。感谢您抽出宝贵时间!