我在rails模型中遇到关联问题。
我有这样的代码
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>>",
我正在使用此方法。
def authenticate_token
authenticate_with_http_token do |token, options|
@current_member = Member.joins(:tokens).where(:tokens => { :token => token })
end
end
答案 0 :(得分:2)
这需要更改以获取实例(不是关系)。只需将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来查看错误并检查对象。这将是一件容易的事。