2014-09-01 177 views
4

爲什麼這個未定義?它與@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 
+2

請向我們展示您的用戶模型的相關部分。 – 2014-09-01 05:12:13

回答

7

你缺少你的用戶模型中的has_many :achievements關係。

6

你需要創建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定義:

enter image description here

這意味着每次調用對象,你實際上是以上調用一系列「方法」,這些方法將使您能夠操作對象本身或其任何相關功能。

您遇到的問題是您的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 
0

東西幫我這種類型的錯誤是,數據庫表是錯過了相關的專欄。將所需列添加到數據庫解決了問題。