Neo4j gem - 更新关系属性方法

时间:2014-11-24 19:13:35

标签: ruby-on-rails neo4j update-attributes neo4j.rb

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

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

我的关系已创建,并且nil类未定义更新。

event = Event.find(params[:event]) 
invite = Invite.create_invitation(event, current_user, nil) #creates relationship
invite.update(interested: params[:interest])

我应该使用另一种方法吗?

1 个答案:

答案 0 :(得分:1)

每当你收到有关nil类的undefined错误时,它应该立即向你发出信号,问题是你调用方法的变量,而不是你调用的方法。换句话说,因为它说nil没有update方法,所以你的重点应该放在实际为零的变量上。这里的问题是:为什么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属性,因此这似乎是为模型添加验证以确保始终在创建时设置属性的好地方。