Rails de méthode non
Pourquoi est-ce indéfinis? A-t-elle quelque chose à voir avec la @current_user
?
Je suis en train de créer des tâches pour mes difficultés. Et la tâche créée devriez obtenir /réalisations. Cependant, j'obtiens une erreur 500.
C'est l'erreur que je reçois:
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
C'est mon code dans mon contrôleur
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
Merci de nous montrer les sections pertinentes de l'utilisateur de votre modèle.
OriginalL'auteur daisy | 2014-09-01
Vous devez vous connecter pour publier un commentaire.
Il vous manque de l'
has_many :achievements
rapport à votre modèle Utilisateur.OriginalL'auteur lynt
Vous aurez besoin pour créer le ActiveRecord associations vous avez besoin:
Cela vous donnera la possibilité d'appeler l'
achievements
méthode à n'importe quelUser
les objets que vous avez.Erreur
L'erreur que vous avez est décrit comme tel:
Cela signifie que vous essayez d'appeler une méthode non définie sur un
User
objet. Peut sembler simple, mais vraiment, la plupart des gens ne le comprennent pas.Pour expliquer correctement, vous devez vous rappeler que les Rails de, par la vertu d'être construit sur le framework Ruby est orienté objet. Cela signifie que tout vous faire dans les Rails devraient être structurés autour des objets qui sont définis dans votre
Models
:Cela signifie que chaque fois que vous appelez un objet, vous êtes réellement au-dessus d'invoquer une série de "méthodes" qui vous donnera la possibilité de manipuler l'objet lui-même, ou l'un des associés de la fonctionnalité.
Le problème que vous avez, c'est que votre
User
objet n'est pas de laachievements
méthode. Alors que vous pourriez simplement faire ce qui suit pour résoudre le problème, parce que c'est des Rails, vous aurez besoin pour remplir le dossier avec des données associatives:OriginalL'auteur Richard Peck
Quelque chose qui m'a aidé avec ce type d'erreur est que la table de base de données manquait la colonne correspondante. L'ajout de la colonne requise pour la base de données fixe le problème.
OriginalL'auteur Greg