我正在尝试决定如何最好地设置(如果有的话)我的rails应用程序的外键约束.我有一个模型Response,belongs_to一个Prompt.我想使用:dependent => :destroy每个Response属于删除的每个调用destroy Prompt,我试图决定我应该在我的外键上放置什么删除约束.
简而言之,我想要了解如何最好地利用依赖对象的destroy方法和外键约束,以确保cruft不会累积并反映存储数据的逻辑结构.几个早期的问题,比如我应该使用ON DELETE CASCADE,:dependent =>:destroy,还是两者都有?和Rails:删除cascade vs dependent destroy询问哪个更好但是他们并没有真正说明两个选择如何相互作用以及它们被触发的顺序或者看起来模糊不清.
正如我所看到的那样,考虑因素似乎分为几个方面:
:dependent => :destroy在从数据库中删除父对象之前,调用是否首先在依赖对象上进行销毁,因此即使我使用级联删除,仍会在这些对象上调用destroy?是否:dependent => :destroy从数据库中移除父项之前(或在事务中)从数据库中删除依赖对象?换句话说,如果我将cascade设置为nullify,数据库最终会在删除子对象之前浪费地取消它们的引用吗?
是否由于原始销毁和链接:dependent => :destroy选项包含在事务中而发出删除,或者遗憾的是,如果我没有设置级联删除,则会在数据库中暂时崩溃?
:dependent => :destroy如果我使用restrict作为外键on_delete选项,最后将确保从数据库中删除父对象?这与其说是一个严重的问题,不如说是一个好奇心问题,但在 console.log 的 MDN文档中关于字符串替换的内容中写道:
%o 或 %O 输出 JavaScript 对象。单击对象名称会在检查器中打开有关该对象的更多信息。
%o 和 %O 之间有什么区别吗?我没有注意到 chrome 中有任何明显的东西。如果不是,为什么两者都存在?只是一些旧的兼容性问题还是我们两者都有的原因?
在 mobx 中,如果我想使用继承,我需要使用 makeObservable 而不是 makeAutoObservable。但是使用 makeObservable 需要我命名改变状态的操作,那么如何将 setter 声明为操作,因为它与 getter 具有相同的名称?
换句话说,我写的 SETTER_FOR_MYVAR 的位置是什么,或者达到相同效果的另一种方法是什么?
class BaseClass {
_myvar = null
set myvar(val) {
this._myvar = val;
}
get myvar() {
return this._myvar;
}
other_action() {
this._myvar = 5;
}
constructor() {
makeObservable(this, {
_myvar: observable,
other_action: action,
SETTER_FOR_MYVAR: action
});
}
}
Run Code Online (Sandbox Code Playgroud)
是的,我知道我可以将其外包给另一个辅助函数 _myvar_setter 并声明一个操作,但这看起来很难看,我希望有更好的方法。
我想将一个虚拟属性添加到activerecord对象.定义getter/setter很简单,但我希望我的属性出现在属性hash(和attribute_names等)中.由于这是rails 4我不能使用attr_accessible.
我还需要添加到此代码中,以便我可以调用reference.attributes并让作者的值显示在那里?
class Reference < ActiveRecord::Base
def authors
self.author_names.to_a.join(' and ')
end
def authors=(val)
self.author_names.destroy
val.strip.split(/(?:[ ]and[ ])|\;/).each {|entry|
self.author_names << AuthorName.new(name: entry)
}
end
end
Run Code Online (Sandbox Code Playgroud) 是否有任何现有项目或简单方法在常见的lisp程序中运行lua代码?我在Lua项目中看到了一些Lisp,但据我所知,他们都没有实现完全普通的lisp,所以不提供可接受的桥梁.
我认为在CL中写一个完整的Lua解释器或通过CFFI访问Lua并不难,但到目前为止我一直无法找到任何代码库来执行此操作.他们不存在或者什么?如果没有,那么现有的代码库是一个很好的起点,例如,使用C代码嵌入lua是否方便CFFI?
编辑:为了避免混淆,请注意CFFI我指的是这个用于调用外部函数的lisp项目而不是python函数.
ecmascript-6 ×2
javascript ×2
activerecord ×1
cascade ×1
common-lisp ×1
compilation ×1
console.log ×1
es6-class ×1
ffi ×1
foreign-keys ×1
lisp ×1
lua ×1
mobx ×1
ruby ×1
setter ×1