在OpenProject应用程序中,我们有两个模型:
class CustomField < ActiveRecord::Base
has_many :custom_options, -> { order(position: :asc) }, dependent: :delete_all
accepts_nested_attributes_for :custom_options
...
end
Run Code Online (Sandbox Code Playgroud)
class CustomOption < ActiveRecord::Base
belongs_to :custom_field, touch: true
...
end
Run Code Online (Sandbox Code Playgroud)
然后,在自定义字段控制器中,我们通过批量分配修改自定义字段的选项并保存记录:
@custom_field.attributes = get_custom_field_params
if @custom_field.save
...
Run Code Online (Sandbox Code Playgroud)
由于我touch: true在custom_field关联中进行了配置,因此CustomOption我希望自定义字段的updated_at属性在此时进行更新,但是这不会发生。该日志未显示任何类似于的SQL请求UPDATE custom_fields SET update_at = ....。无论是添加自定义选项还是修改自定义选项,对自定义选项本身所做的更改都将正确保留。
调试显示:
custom_field.custom_options.build及后续custom_field.savecustom_field.custom_options.createCustomOption.create custom_field: xcustom_field.custom_option[x].destroy我知道我可以通过定义after_save回调来解决此问题,但是这种行为确实让我感到意外,因为这是意外的。
是否期望并记录了上述行为?如果是这样,我在哪里可以找到此信息?
题
在有向无环图(DAG)中,是否总是通过反转要添加的关系来防止由于添加关系而导致的循环传递关系?
例:
A -> B,B -> C以及通过该传递关系A -> C,因此可以将其视为A -> B -> CC -> A这将导致A -> B -> C -> A循环C <- A这将导致A -> B -> C <- A并因此仍然是非循环的这里给出的示例当然很简单,因此我想知道这种方法在所有情况下是否可行。
背景
为了建模实体之间的有向关系(例如,“跟随”,“先行”,“父”,“子”),OpenProject应用程序将其关系信息存储在有向非循环图(DAG)中。实体/节点具有日期信息,并且可以由用户重新安排。如果用户更改日期值,则可能需要自动重新安排其他实体的时间,例如,当将前任转移到未来两天时,还需要转移其后继者。
由于大多数关系都用于调度,因此正因为它是一个非循环图,所以避免了循环。它们将导致无限的调度循环。
尽管大多数关系也从语义的角度出发指明方向,但也存在通用的“相对于”关系,该关系相对于用户是无向的,只是传达存在某种关系的信息。由于其性质,前端中的用户看不到DAG中存在的“与...相关”关系的方向方面。
当用户尝试创建“相对于”关系时,他当前可能会遇到错误消息,警告循环关系,这对于用户来说是不可理解的,因为他对关系的理解是无向的。
有两种可能的方法可以解决该问题,最简单的方法是在这种情况下简单地逆转该关系,因为DAG内的方向对于这种关系对用户而言并不重要。
我有一个嵌套的数据哈希
foo => {
'user' => {
'address' => {
'street' => '1234'
}
}
}
Run Code Online (Sandbox Code Playgroud)
我可以使用 Hash.dig 访问这些值
foo.dig('user', 'address', 'street')
1234
Run Code Online (Sandbox Code Playgroud)
当值是可变的并且在数组中定义时,您将如何使用 hash.dig?
query=["users", "address", "street"]
foo.dig(query) # <= doesn't work
foo.dig(query.to_s) # <= doesn't work
Run Code Online (Sandbox Code Playgroud)
查看 ruby 文档,Hash.dig 似乎采用多个参数,但不采用数组
https://ruby-doc.org/core-2.3.0_preview1/Hash.html#method-i-dig
我目前正在尝试运行 run.rb 文件,但我不断收到 sqlite3 的错误。当我输入 时bundle install,我收到此成功消息:
Fetching gem metadata from https://rubygems.org/.........
Resolving dependencies...
Using rake 12.3.2
Using concurrent-ruby 1.1.4
Using i18n 1.5.3
Using minitest 5.11.3
Using thread_safe 0.3.6
Using tzinfo 1.2.5
Using activesupport 5.2.2
Using activemodel 5.2.2
Using arel 9.0.0
Using activerecord 5.2.2
Using bundler 2.0.1
Using coderay 1.1.2
Using equatable 0.5.0
Using method_source 0.9.2
Using mustermann 1.0.3
Using necromancer 0.4.0
Using tty-color 0.4.3
Using pastel 0.7.2
Using pry 0.12.2
Using rack 2.0.6
Using rack-protection 2.0.5
Using …Run Code Online (Sandbox Code Playgroud)