Neo4j gem - 更新关系属性方法



这是一个相当简单的问题。

是否有更新 gem 中关系属性的特定方法?我似乎不能做一个简单的update_attributesupdate.

我的关系已创建,并且未为 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属性,因此这似乎是向模型添加验证以确保始终在创建时设置该属性的好地方。

相关内容

  • 没有找到相关文章

最新更新