每當你得到一個關於nil類未定義的錯誤,它應該是一個直接的信號給你,問題是你調用方法的變量,而不是你調用的方法。換句話說,因爲它說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
屬性,你可以做它在一個調用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
財產,這看起來像是向模型添加驗證的好地方,以確保該屬性始終設置爲create。
謝謝克里斯。 Ruby通常返回最後一個對象。如果你只是'InvitationRel.new(from_node:event,to_node:user).save',我想知道爲什麼沒有返回關係對象。爲什麼我們需要明確地歸還它?在我不知道的創作中有沒有巧妙的? – Clam 2014-11-24 20:22:45
'save'不返回被調用的對象,它返回對象是否成功保存的布爾值。 'create'不會返回對象,但不會顯示它是否成功。這就是爲什麼你看到'如果obj.save然後do_this else do_that''模式無處不在。 – subvertallchris 2014-11-24 20:54:59