2017-02-27 18 views
0

レールのモデルで関連付けに問題があります。モデルはhas_manyリレーションシップを得ることができません。

私はコード

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

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

の、このような作品は、その後、私のコントローラで、私は

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 

最近すべてはそれが必要として働いていました。さて、トークンテーブルを作成して+それをモデルに追加した後に、それは言うのです

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

私はこの方法でユーザーを得ています。

答えて

1

これは、インスタンス(リレーションではない)を取得するために変更する必要があります。最後にfirstを追加してください。

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

注:エラーはActiveRecord_Relationオブジェクトにあります。

デバッグ方法もわかりませんが、https://github.com/charliesome/better_errorsを使用して、その時点のエラーを確認し、オブジェクトを検査することをお勧めします。ここで簡単にキャッチされたでしょうか。

+0

偉大な、それは魅力のように動作します!私は ''最初に ''と何かを試してきましたが、確かにそこにはありません:Dありがとう!編集:私はJavaでIntelliJ IDEAに慣れているように私はRubyMineを使用して –

関連する問題