2017-02-27 1 views
0

J'ai des problèmes avec le modèle de l'association dans les rails.Modèle ne peut pas voir has_many relation, obtenir

je suis arrivé ce genre de code

class Member < ApplicationRecord 
    has_many :rooms 
    has_many :tokens, dependent: :destroy 

    has_secure_password 
    //[...] - some validations not according to my model 

Puis, dans mon contrôleur je

def create 
    unique_id = SecureRandom.uuid 
    @room = @current_member.rooms.new(unique_id: unique_id) 
    @room_details = RoomDetail.new(video_url: 'test', room: @room) 

    if @room.save 
    render json: @room, status: :created, location: @room 
    else 
    render json: @room.errors, status: :unprocessable_entity 
    end 
end 

Récemment tout fonctionnait comme il se doit. Maintenant, après avoir créé la table des jetons + ajoutant que les modèles, il dit

"status": 500, 
"error": "Internal Server Error", 
"exception": "#<NoMethodError: undefined method `rooms' for #<Member::ActiveRecord_Relation:0x00560114fbf1d8>>", 

Je reçois utilisateur avec cette méthode.

def authenticate_token 
    authenticate_with_http_token do |token, options| 
    @current_member = Member.joins(:tokens).where(:tokens => { :token => token }) 
    end 
end 

Répondre

1

Cela devra changer pour obtenir une instance (pas une relation). Ajoutez simplement first à la fin.

authenticate_with_http_token do |token, options| 
    @current_member = Member.joins(:tokens).where(:tokens => { :token => token }).first 
end 

Notez que l'erreur est sur l'objet ActiveRecord_Relation.

En outre, je ne suis pas sûr de la façon dont vous déboguez, mais je recommande d'utiliser https://github.com/charliesome/better_errors pour voir l'erreur à ce moment et inspecter les objets. Aurait été une prise facile ici.

+0

Super, ça marche comme le charme! J'ai essayé quelque chose avec '' 'first''' mais certainement pas là: D Merci! EDIT: Im utilisant RubyMine comme je suis habitué à IntelliJ IDEA en Java –