多くのコントローラの edit メソッドでは、新しいオブジェクトを初期化し、既存のオブジェクトを編集します
class MagazinesController < ApplicationController
def edit
@magazine = Magazine.find(params[:magazine_id])
@page = Page.find(params[:id])
@new_page = @magazine.pages.new
end
end
ただし、ビューでは、永続化されたオブジェクトを循環させて、新しいオブジェクトを個別に扱いたいことがよくあります。
# 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
これを行う方法はありますか?