Rails的管理的has_many:通过关系编辑资源时造成的模板无限渲染 [英] Rails admin has_many :through relationship causing infinite rendering of templates when editing resource

查看:218
本文介绍了Rails的管理的has_many:通过关系编辑资源时造成的模板无限渲染的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个Rails应用程序具有的has_many:通过模型像这样:

I have a rails app with a has_many :through model like so:

class Blog < ActiveRecord::Base
  has_many :blog_categorizations, dependent: :destroy
  has_many :categories, :through => :blog_categorizations
  accepts_nested_attributes_for :categories, allow_destroy: true
end

class Category < ActiveRecord::Base
  has_many :blog_categorizations, dependent: :destroy
  has_many :blog, :through => :blog_categorizations
  accepts_nested_attributes_for :blog, allow_destroy: true
end

class BlogCategorization < ActiveRecord::Base
  belongs_to :blog
  belongs_to :category
end

在我的Rails管理配置我有:

In my Rails admin configuration I have:

config.model Blog do
    edit do
      field :title
      field :content
      field :source
      field :author
      field :date
      field :photos
      field :categories
    end
  end

现在,当我试图通过rails_admin添加一个新的博客,或尝试编辑pre-现有的,我得到的rails_admin模板无限渲染这样的:

Now when I attempt to add a new Blog through rails_admin, or attempt to edit a pre-existing one, I get infinite rendering of rails_admin templates like this:

Started GET "/admin/recipe/new?_pjax=%5Bdata-pjax-container%5D" for 127.0.0.1 at 2014-10-29 07:41:35 -0700
  ActiveRecord::SchemaMigration Load (0.8ms)  SELECT "schema_migrations".* FROM "schema_migrations"
Processing by RailsAdmin::MainController#new as HTML
  Parameters: {"_pjax"=>"[data-pjax-container]", "model_name"=>"recipe"}
  User Load (1.0ms)  SELECT  "users".* FROM "users"  WHERE "users"."id" = 1  ORDER BY "users"."id" ASC LIMIT 1
  Rendered /Users/adam419/.rbenv/versions/2.0.0-p481/lib/ruby/gems/2.0.0/gems/rails_admin-0.6.3/app/views/rails_admin/main/_form_field.html.haml (2.3ms)
  Rendered /Users/adam419/.rbenv/versions/2.0.0-p481/lib/ruby/gems/2.0.0/gems/rails_admin-0.6.3/app/views/rails_admin/main/_form_text.html.haml (1.0ms)
  Rendered /Users/adam419/.rbenv/versions/2.0.0-p481/lib/ruby/gems/2.0.0/gems/rails_admin-0.6.3/app/views/rails_admin/main/_form_field.html.haml (0.2ms)
  Rendered /Users/adam419/.rbenv/versions/2.0.0-p481/lib/ruby/gems/2.0.0/gems/rails_admin-0.6.3/app/views/rails_admin/main/_form_field.html.haml (0.2ms)
  Rendered /Users/adam419/.rbenv/versions/2.0.0-p481/lib/ruby/gems/2.0.0/gems/rails_admin-0.6.3/app/views/rails_admin/main/_form_datetime.html.haml (1.7ms)
  Rendered /Users/adam419/.rbenv/versions/2.0.0-p481/lib/ruby/gems/2.0.0/gems/rails_admin-0.6.3/app/views/rails_admin/main/_form_nested_many.html.haml (25.6ms)
  Rendered /Users/adam419/.rbenv/versions/2.0.0-p481/lib/ruby/gems/2.0.0/gems/rails_admin-0.6.3/app/views/rails_admin/main/_form_nested_many.html.haml (16.2ms)
  Rendered /Users/adam419/.rbenv/versions/2.0.0-p481/lib/ruby/gems/2.0.0/gems/rails_admin-0.6.3/app/views/rails_admin/main/_submit_buttons.html.haml (2.9ms)
   (0.6ms)  SELECT COUNT(*) FROM "blogs"
  Recipe Load (0.7ms)  SELECT "blogs".* FROM "blogs"   ORDER BY blogs.id desc
  Rendered /Users/adam419/.rbenv/versions/2.0.0-p481/lib/ruby/gems/2.0.0/gems/rails_admin-0.6.3/app/views/rails_admin/main/_form_filtering_select.html.haml (14.3ms)
  Rendered /Users/adam419/.rbenv/versions/2.0.0-p481/lib/ruby/gems/2.0.0/gems/rails_admin-0.6.3/app/views/rails_admin/main/_form_file_upload.html.haml (4.0ms)
  Rendered /Users/adam419/.rbenv/versions/2.0.0-p481/lib/ruby/gems/2.0.0/gems/rails_admin-0.6.3/app/views/rails_admin/main/_form_field.html.haml (0.3ms)
  Rendered /Users/adam419/.rbenv/versions/2.0.0-p481/lib/ruby/gems/2.0.0/gems/rails_admin-0.6.3/app/views/rails_admin/main/_form_field.html.haml (1.6ms)
   (0.4ms)  SELECT COUNT(*) FROM "blog_categorizations"
  BlogCategorization Load (0.3ms)  SELECT "blog_categorizations".* FROM "blog_categorizations"   ORDER BY blog_categorizations.id desc
  Category Load (0.5ms)  SELECT "categories".* FROM "categories"  WHERE "categories"."id" IN (1, 5)
  Recipe Load (0.3ms)  SELECT "blogs".* FROM "blogs"  WHERE "blogs"."id" IN (65)
  Rendered /Users/adam419/.rbenv/versions/2.0.0-p481/lib/ruby/gems/2.0.0/gems/rails_admin-0.6.3/app/views/rails_admin/main/_form_filtering_multiselect.html.haml (22.1ms)
  Rendered /Users/adam419/.rbenv/versions/2.0.0-p481/lib/ruby/gems/2.0.0/gems/rails_admin-0.6.3/app/views/rails_admin/main/_form_nested_many.html.haml (1.6ms)
  Rendered /Users/adam419/.rbenv/versions/2.0.0-p481/lib/ruby/gems/2.0.0/gems/rails_admin-0.6.3/app/views/rails_admin/main/_form_field.html.haml (0.2ms)
  Rendered /Users/adam419/.rbenv/versions/2.0.0-p481/lib/ruby/gems/2.0.0/gems/rails_admin-0.6.3/app/views/rails_admin/main/_form_text.html.haml (0.3ms)
  Rendered /Users/adam419/.rbenv/versions/2.0.0-p481/lib/ruby/gems/2.0.0/gems/rails_admin-0.6.3/app/views/rails_admin/main/_form_field.html.haml (0.2ms)
  Rendered /Users/adam419/.rbenv/versions/2.0.0-p481/lib/ruby/gems/2.0.0/gems/rails_admin-0.6.3/app/views/rails_admin/main/_form_field.html.haml (0.2ms)
  Rendered /Users/adam419/.rbenv/versions/2.0.0-p481/lib/ruby/gems/2.0.0/gems/rails_admin-0.6.3/app/views/rails_admin/main/_form_datetime.html.haml (0.9ms)
  Rendered /Users/adam419/.rbenv/versions/2.0.0-p481/lib/ruby/gems/2.0.0/gems/rails_admin-0.6.3/app/views/rails_admin/main/_form_nested_many.html.haml (1.3ms)
  Rendered /Users/adam419/.rbenv/versions/2.0.0-p481/lib/ruby/gems/2.0.0/gems/rails_admin-0.6.3/app/views/rails_admin/main/_form_nested_many.html.haml (1.2ms)
  CACHE (0.0ms)  SELECT "blogs".* FROM "blogs"   ORDER BY blogs.id desc
  Rendered /Users/adam419/.rbenv/versions/2.0.0-p481/lib/ruby/gems/2.0.0/gems/rails_admin-0.6.3/app/views/rails_admin/main/_form_filtering_select.html.haml (4.0ms)
  Rendered /Users/adam419/.rbenv/versions/2.0.0-p481/lib/ruby/gems/2.0.0/gems/rails_admin-0.6.3/app/views/rails_admin/main/_form_file_upload.html.haml (0.5ms)
  Rendered /Users/adam419/.rbenv/versions/2.0.0-p481/lib/ruby/gems/2.0.0/gems/rails_admin-0.6.3/app/views/rails_admin/main/_form_field.html.haml (0.2ms)
  Rendered /Users/adam419/.rbenv/versions/2.0.0-p481/lib/ruby/gems/2.0.0/gems/rails_admin-0.6.3/app/views/rails_admin/main/_form_field.html.haml (0.2ms)
  CACHE (0.0ms)  SELECT "blog_categorizations".* FROM "blog_categorizations"   ORDER BY blog_categorizations.id desc
  CACHE (0.0ms)  SELECT "categories".* FROM "categories"  WHERE "categories"."id" IN (1, 5)
  CACHE (0.0ms)  SELECT "blogs".* FROM "blogs"  WHERE "blogs"."id" IN (65)
  Rendered /Users/adam419/.rbenv/versions/2.0.0-p481/lib/ruby/gems/2.0.0/gems/rails_admin-0.6.3/app/views/rails_admin/main/_form_filtering_multiselect.html.haml (3.9ms)
  Rendered /Users/adam419/.rbenv/versions/2.0.0-p481/lib/ruby/gems/2.0.0/gems/rails_admin-0.6.3/app/views/rails_admin/main/_form_nested_many.html.haml (1.1ms)
  Rendered /Users/adam419/.rbenv/versions/2.0.0-p481/lib/ruby/gems/2.0.0/gems/rails_admin-0.6.3/app/views/rails_admin/main/_form_field.html.haml (0.2ms)
  Rendered /Users/adam419/.rbenv/versions/2.0.0-p481/lib/ruby/gems/2.0.0/gems/rails_admin-0.6.3/app/views/rails_admin/main/_form_text.html.haml (0.3ms)
  Rendered /Users/adam419/.rbenv/versions/2.0.0-p481/lib/ruby/gems/2.0.0/gems/rails_admin-0.6.3/app/views/rails_admin/main/_form_field.html.haml (0.2ms)
  Rendered /Users/adam419/.rbenv/versions/2.0.0-p481/lib/ruby/gems/2.0.0/gems/rails_admin-0.6.3/app/views/rails_admin/main/_form_field.html.haml (0.2ms)
  Rendered /Users/adam419/.rbenv/versions/2.0.0-p481/lib/ruby/gems/2.0.0/gems/rails_admin-0.6.3/app/views/rails_admin/main/_form_datetime.html.haml (1.0ms)
  Rendered /Users/adam419/.rbenv/versions/2.0.0-p481/lib/ruby/gems/2.0.0/gems/rails_admin-0.6.3/app/views/rails_admin/main/_form_nested_many.html.haml (1.2ms)
  Rendered /Users/adam419/.rbenv/versions/2.0.0-p481/lib/ruby/gems/2.0.0/gems/rails_admin-0.6.3/app/views/rails_admin/main/_form_nested_many.html.haml (1.2ms)

此相同的输出只发生无限,似乎并没有停下来,仿佛它是进入加载博客类别,那么类别博客等无限循环

This same output just occurs infinitely and doesn't seem to stop, almost as if it's entered an infinite loop of loading the blogs categories, then the categories blogs, etc.

我怎样才能阻止这种情况出现?

How can I stop this from occuring?

推荐答案

删除accepts_nested_attributes_for:博客在Category.rb解决了这一问题。

Removing accepts_nested_attributes_for :blog in Category.rb fixed the problem

accepts_nested_attributes_for :blog

这是pviously $ P $的Category.rb但在code贴在问题中删除。

This was previously in Category.rb but removed in the code posted in question.

此外,留下

accepts_nested_attributes_for :blog

但加入inverse_of:针对博客模型类像

but adding inverse_of: category for blog model like

has_many :blog, :through => :blog_categorizations, inverse_of: category

has_many :blog, :through => :blog_categorizations, inverse_of: blog

引发的问题消失。我目前使用的inverse_of选项,即使它不应该工作:通过模型,但由于某些原因,在许多对许多适用于Rails的管理员

caused the problem to go away. I'm currently using the inverse_of option even though it isn't supposed to work for :through models, but for some reason works for Rails Admin in many-to-many.

这篇关于Rails的管理的has_many:通过关系编辑资源时造成的模板无限渲染的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆