这是一个相当简单的问题。
是否存在用于更新gem中关系属性的特定方法?我似乎无法做到简单update_attributes
或update
。
我的关系已创建,并且nil类的更新未定义。
event = Event.find(params[:event])
invite = Invite.create_invitation(event, current_user, nil) #creates relationship
invite.update(interested: params[:interest])
我应该使用另一种方法吗?
每当您收到有关nil类的undefined的错误时,应该立即向您发出信号,即问题出在您正在调用方法的变量上,而不是您正在调用的方法。换句话说,因为这说的是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
属性,那么这似乎是向模型添加验证以确保该属性始终在create上设置的好地方。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句