27347


現状以下の問題を認識しています。

### 登場モデル

以下の様なモデル例で説明します。

Account has_many posts  
Post belongs_to category  
Category

  * `accepts_nested_attributes_for :posts`でAccountのedit時にpostを複数編集

### `<%= f.fields_for :posts do |f| %>`の場合

上記のfileds_for内に、`f.object.category.try(:name)`などのように記述するとN+1問題が発生します。

### `<%= f.fields_for :posts, f.object.posts.includes(:category) do |f| %>`の場合

N+1問題は解決しますが、Postモデルに`validates :title, presence:
true`としていた場合に、`f.object.posts.includes(:category)`を指定しているとpostsが再読み込みされてしまいエラー情報が消えてしまう。

* * *

上記のN+1問題を解決しつつ、postsモデルのerrors情報を保持するにはどのように記述すればよいのでしょうか？

コード例は以下のリンクにあります。

<https://github.com/kntmrkm-public/fields-for-example>


CC BY-SA 3.0
2016-07-05T02:49:52.030
27342
2016-07-05T03:51:39.987
512
question
ruby-on-rails
Rails fields_forのN+1問題・エラー表示


`includes` を使って、関連するデータを事前にロードすれば良いと思います。

app/controllers/accounts_controller.rb:

[code]

    def set_account
      @account = Account.includes(:posts => :category).find(params[:id])
    end
    
[/code]


CC BY-SA 3.0
2016-07-05T03:51:39.987
27347
2016-07-05T03:51:39.987
76
27342
answer