如何让rails_admin gem识别带有acts_as_taggable_on tag_lists的模型?

时间:2015-03-19 02:04:49

标签: ruby-on-rails rails-admin acts-as-taggable-on

我正在使用rails_admin和acts_as_taggable_on gems设置rails应用程序。

在项目早期尝试确保可以完成此操作时,我在rails_admin github页面上找到了this issue,导致this gem仍然在rails_admin github wiki上的插件列表中。所以似乎可以做到。

我首先按照自述文件中的rails_admin,acts_as_taggable_on和rails_admin_tag_list中的设置说明进行操作。我在应用程序上有一些模型,在向它们添加任何标记功能之前,它们会在rails_admin上显示并正常工作。

以下是我尝试将标记添加到的模型示例:

class Location < ActiveRecord::Base
  acts_as_taggable
  acts_as_taggable_on :regions

  private

  def location_params
    params.require(:location).permit(:lat, :long, :tag_list => [], :region_list => [])
  end
end

在这种格式中,我会收到一个闪光通知:&#34;模型&#39;位置&#39;无法找到&#34;访问rails管理页面时。位置模型也不会显示在模型列表中。

我还没有构建用于添加数据的页面,但我确实通过rails控制台向我的数据库添加了一个位置,并使用acts_as_taggable_on自述文件中的示例将标签添加到该位置的列表中:

a = Location.new
a.region_list.add("awesome")

完成此操作并再次查看rails_admin页面后,我仍然可以看到&#34;模型&#39;位置&#39;无法找到&#34;闪光通知。但我也在模型列表中看到了位置。

点击位置会出现以下错误:

NoMethodError at /location

undefined method `[]' for #<RailsAdmin::Adapters::ActiveRecord::Property:0x00000101fabd90>

更好的错误显示

if tag_types.include?(properties[:name]) 

下面的行是故障线:

RailsAdmin::Config::Fields.register_factory do |parent, properties, fields|

  model = parent.abstract_model.model

  if defined?(::ActsAsTaggableOn) && model.taggable?
    tag_types = model.tag_types

    if tag_types.include?(properties[:name])
      name = "#{properties[:name].to_s.singularize}_list".to_sym
      fields << RailsAdmin::Config::Fields::Types::TagList.new(parent, name, properties)

    end
  end

我还很新,但似乎目前还没有很多关于这两颗宝石之间相互作用的文章。我非常感谢您提供的任何洞察力,以使rails admin能够正确显示带有tag_lists的模型。谢谢!

1 个答案:

答案 0 :(得分:4)

好的,让我先说一下,我不知道自己在做什么。但我可能有一个线索。

rails_admin_tag_list尚未针对Rails 4进行更新,它看起来像你正在使用(你好,强参数!)。而且我猜你正在使用最新版本的rails_admin,因为你使用的是Rails 4。

根据您已经完成的调试工作,看起来问题出在RailsAdmin::Adapters::ActiveRecord::Property(或者至少与您的问题相邻),看起来它是在较新版本的{{{}}中添加的1}}。 (或者至少在没有彻底研究的情况下看起来就是这样。)

rails_admin上有一个未合并的拉取请求,看起来它解决了该问题here

所以,我建议尝试在rails_admin_tag_list中指定rails_admin_tag_list的fork / commit,如下所示:

Gemfile

祝你好运!