ruby-on-rails - 您如何仅引用事件记录关联中的持久记录

标签 ruby-on-rails activerecord

在许多 Controller 的编辑方法中,您初始化一个新对象并编辑现有对象

class MagazinesController < ApplicationController
   def edit
      @magazine = Magazine.find(params[:magazine_id])
      @page = Page.find(params[:id])
      @new_page = @magazine.pages.new
   end
end

但是,在 View 中,您通常希望循环遍历持久化对象并单独处理新对象
# magazines#edit
%h4 Existing pages
- @magazine.pages.each do |page|
  %p= link_to page, page.title

问题

...是pages关联既包含现有(持久)页面,也包含我们通过 @new_page = @magazine.pages.new 创建的新页面.

处理这个很容易,但它很丑
%h4 Existing pages
- @magazine.pages.each do |page|
  - if page.persisted?
    %p= link_to page, page.title

我想使用一些关联方法来只选择那些持久化的页面:
%h4 Existing pages
- @magazine.pages.persisted.each do |page|
  %p= link_to page, page.title

有没有办法做到这一点?

最佳答案

您可以在 Page 模型中创建 persisted范围:scope :persisted, -> { where "id IS NOT NULL" } ,这避免了在每个关联页面上迭代以检查它是否是新记录。

关于ruby-on-rails - 您如何仅引用事件记录关联中的持久记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19842765/

相关文章:

ruby-on-rails - 如何随时间限制 Sidekiq 的 REDIS 内存使用量?

ruby-on-rails - 如何在erb中编写while循环

php - 在 Active Record 样式 ORM 中实现预加载的干净方法?

ruby-on-rails - 急切加载不适用于 rails 中的 order() 子句

ruby-on-rails - 在 gem 中测试 ActiveRecord 模型?

ruby-on-rails - Rails redirect_to https 同时保留所有参数

ruby-on-rails - rubyzip - 无法加载此类文件 - zip

ruby-on-rails - Activerecord:通过数组删除多个关联

ruby-on-rails - 在 form_tag 中加载数据而不刷新 Rails 4 中的页面

mysql - 如何延迟加载或急切加载关联表的总和?