1

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

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

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

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

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

4

1 回答 1

1

每当您收到有关 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属性,因此这看起来是向您的模型添加验证以确保始终在创建时设置该属性的好地方。

于 2014-11-24T20:04:09.323 回答