Rails未定义方法
问题描述:
为什么这个未定义?它与@current_user
有什么关系?Rails未定义方法
我正在尝试为我的挑战创建任务。创建的任务应该获得/成就。但是,我收到GET 500错误。
这是我的错误:
NoMethodError at /achievements
==============================
> undefined method `achievements' for #<User:0x00000105140dd8>
app/controllers/achievements_controller.rb, line 5
--------------------------------------------------
``` ruby
1 class AchievementsController < ApplicationController
2
3
4 def index
> 5 @achievements = @current_user.achievements
6 render :json => @achievements
7 end
8
9 def new 10 @achievement = Achievement.new
这是我的代码在我的控制器
class AchievementsController < ApplicationController
def index
@achievements = @current_user.achievements
render :json => @achievements
end
def new
@achievement = Achievement.new
render :json => @achievement
end
#create a new achievment and add it to the current user
#check then set the acheivments pub challenge id to the current pub challenge
def create
@achievement = Achievement.new achievement_params
@achievement.user = @current_user.id
@achievement.pub_challenge = params[:id]
if @achievement.save
# render :json => @achievement #{ status: 'ok'}
else
render :json => {:errors => @achievement.errors}
end
end
def show
@achievement = Achievement.find params[:id]
render :json => @achievement
end
def destroy
@achievement = Achievement.find params[:id]
@achievement.destroy
end
private
def achievement_params
params.require(:achievement).permit(:pub_challenges)
end
end
答
你缺少你的用户模型中的has_many :achievements
关系。
答
你需要创建ActiveRecord associations您需要:
#app/models/user.rb
class User < ActiveRecord::Base
has_many :achievements
end
#app/models/achievement.rb
class Achievement < ActiveRecord::Base
belongs_to :user
end
这会给你打电话的achievements
方法对您有任何User
对象的能力。
错误
你已经被描述为这样的错误:
undefined method `achievements' for #<User:0x00000105140dd8>
这基本上意味着你要调用一个User
对象的一个未定义的方法。可能听起来很简单,但实际上,大多数人都不理解它。
为了正确解释,您必须记住,由于构建在Ruby上的Rails是object orientated。这意味着,一切你在做的Rails应围绕物体的结构 - 这是在您的Models
定义:
这意味着每次调用对象,你实际上是以上调用一系列“方法”,这些方法将使您能够操作对象本身或其任何相关功能。
您遇到的问题是您的User
对象没有achievements
方法。虽然你可以简单地做下面来解决这个问题,因为它是Rails中,你需要填充关联数据记录:
#app/models/user.rb
class User < ActiveRecord::Base
has_many :achievements #-> what you need
def achievements
#this will also fix the error you see, although it's fundamentally incorrect
end
end
答
东西帮我这种类型的错误是,数据库表是错过了相关的专栏。将所需列添加到数据库解决了问题。
请向我们展示您的用户模型的相关部分。 – 2014-09-01 05:12:13