这是一个相当简单的问题。
是否有更新 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 类的未定义错误时,它应该立即向您发出信号,表明问题在于您调用该方法的变量,而不是您正在调用的方法。换句话说,既然它说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
属性分开,只需在对 DB 的一次调用中完成:
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
属性,因此这似乎是向模型添加验证以确保始终在创建时设置该属性的好地方。