每当您收到有关 undefined for nil 类的错误时,它应该立即向您发出信号,表明问题出在您正在调用该方法的变量上,而不是您正在调用的方法。换句话说,既然它说nil
没有update
方法,那么你的重点应该放在实际上是 nil 的变量上。这里的问题是:为什么是invite
回归nil
而不是关系?
由于您使用自定义类方法来创建关系,我猜您并没有告诉它返回正确的对象。它应该看起来像这样:
def self.create_invitation(event, user, something_else = nil)
rel = InvitationRel.new(from_node: event, to_node: user)
if rel.save
rel
else
# return an error, maybe rel.errors.full_messages?
end
end
然后您的控制器需要检查 rel 是否实际创建正确。
event = Event.find(params[:event])
invite = Invite.create_invitation(event, current_user, nil) #creates relationship
if invite.neo_id.nil?
# the rel did not create correctly, neo_id is only present on persisted objects
else
invite.update(interested: params[:interest])
end
这对我来说感觉就像你在这个问题上花了很长的路要走。您不需要将关系的创建和interested
属性设置分开,只需一次调用数据库即可:
event = Event.find(params[:event])
invite = InviteRel.new(from_node: event, to_node: current_user, interested: params[:interest])
if invite.save?
# rel was created, move on
else
# something wrong in the rel, figure out what it was
end
由于您知道您总是要创建该interested
属性,因此这看起来是向您的模型添加验证以确保始终在创建时设置该属性的好地方。