你好!好久不见。Emmanuel Hayford 在此。本周,Rails 发生了很多事情,以至于为了保持本期简短,我不得不删掉一些 同样优秀的 拉取请求。以下是今天为您准备的内容。
允许通过整个记录进行复合查询约束 假设您已经通过 has_many 方法在 BlogPost 和 Comment 两个模型之间定义了具有复合查询约束的关联。
class BlogPost has_many :comments, query_constraints: [:blog_id, :blog_post_id] end
您现在可以通过将 comments 对象作为参数传递给 where 方法,来查询与一组特定评论关联的博文。
comments = Comment.first(2) BlogPost.where(comments: comments).to_a 然而,目前 belongs_to、has_one、has_many_through 和多态关联等关联类型尚未涵盖。如果您有兴趣,可以深入研究一下!
ActiveRecord::FinderMethods#find 支持复合主键值 ActiveRecord::FinderMethods#find 现在支持传递复合主键值集,例如:
Cpk::Book.find([[1, 1], [1, 2]])
并将这些值视为复合主键列的值,但仅限于主键为 Array 的模型。
为内置重启任务使用 Thor 这是将 bin/rails 从 Rake 迁移到 Thor 的一部分工作,但这项更改的一个不错附带好处是,您现在可以在应用程序目录外调用 bin/rails restart,如下所示:
my_app/bin/rails restart
为 Arel::Nodes::Node 添加文档 Arel 是一个私有 API,这意味着过去没有进行任何有意义的文档记录工作。但这并没有阻止 gem 作者和应用程序程序员使用它——我们不妨记录一下,而这个拉取请求为需要它的任何人提供了 Arel 的重要部分文档。
引入 TestFixtures#fixture_paths 在此更新中,我们弃用 TestFixtures#fixture_path,转而使用 TestFixtures#fixture_paths。
通过此更新,现在可以通过使用 fixture_paths 访问器在 Rails 应用程序中指定多个 fixture 路径。默认情况下,test/fixtures 目录将继续作为应用程序的主要 fixture 路径。但是,如果您需要包含其他目录中的 fixture,您可以使用 fixture_paths 方法指定其他 fixture 路径。
这允许例如:
ActiveSupport::TestCase.fixture_paths << “component1/test/fixtures” ActiveSupport::TestCase.fixture_paths << “component2/test/fixtures”
委托类型支持自定义外键类型列 使用 delegated_type 方法时,{role}_class 方法现在会尊重 foreign_type 选项。这意味着您可以使用非传统的 {role}_type 列名与 delegated_type 一起使用,方法是指定 foreign_type 选项。此选项会转发给 delegated_type 包装的底层 belongs_to 关联,允许您指定外键类型列的名称。
我想分享一些会议新闻:RailsConf Atlanta 将于 2023 年 4 月 24 日至 4 月 26 日举行,如果您计划参加,现在仍可购票。RubyKaigi 也将在 2023 年 5 月 11 日至 13 日举行。
上周我们看到了 32 位贡献者!下周见。
每周为您提供来自 Rails 的有趣提交、拉取请求等方面的内部快讯。
订阅以通过邮件获取这些更新。