我有当前代码
bfabry@18723-bfabry /t/foo> plk
ClojureScript 1.10.520
cljs.user=> (require '[cljsjs.js-yaml])
nil
cljs.user=> (js/jsyaml.safeLoad "app:\n bar: baz\n")
#js {:app #js {:bar "baz"}}
cljs.user=>
在这里创建控制器:
class NotifyBar < ActiveRecord::Base
belongs_to :user_instance
after_save :update_notifications
def update_notifications
notifier = NotificationHandler::Notifier.new
notifier.check_and_update_status(self.user_instance.id)
end
end
但是,当after_save触发时,我得到了:
NotifyBarController#create中的NoMethodError nil:NilClass的未定义方法'id'
如何可靠地传递belongs_to变量的ID?
答案 0 :(得分:1)
您没有显示足够的代码来确定,但是看起来@user_instance
是nil
的这一行:@notify_bar.user_instance= @user_instance
,因此您需要将该关联设置为{{1} }。
如果不是,请说明如何在控制器中进行设置?
新代码显示nil
操作未调用回调,因此未设置create
。即使已设置,它也会被设置为@user_instance
实例,因此无论如何都不会与NotifyBar
模型中的belongs_to :user_instance
匹配。
答案 1 :(得分:0)
结果是,NotifyBar被我不知道的外部类(“帮助”类)调用。它正在调用update_notifications(就像调用after_save一样),但是当该类是新创建的并且尚未保存时。然后出现错误,因为预先保存,并非总是可以访问class变量。
所以,我想得出的结论是,如果ActiveRecord类的变量神秘地“消失”了,可能是因为ActiveRecord尚未保存,所以它们并不是最初创建的。 (第二点,如果您要使用帮助器类,让这些帮助器类在他们正在帮助的类中添加注释说明这些帮助器函数正在尝试提供帮助可能会有所帮助。)