我得到了臭名昭著的:
Ransack 明确需要 ActiveStorage::Attachment 属性 列入允许搜索范围。定义一个
类ransackable_attributes
模型中的方法。ActiveStorage::Attachment
...错误。这是因为我的 app/models/user.rb 有:
has_one_attached :avatar
所以出于某种原因它希望我声明这一点。如果我注释掉该行...那么我就可以在 activeadmin 中加载用户了。但我宁愿解决问题。
我的 photo.rb 也有同样的问题,因为它还附加了一个 activestorage 文件。以前 Activeadmin 中没有模型会加载。
但现在我已经将这些行添加到 application_record.rb 中:
def self.ransackable_associations(auth_object = nil)
@ransackable_associations ||= reflect_on_all_associations.map { |a| a.name.to_s }
end
def self.ransackable_attributes(auth_object = nil)
@ransackable_attributes ||= column_names + _ransackers.keys + _ransack_aliases.keys + attribute_aliases.keys
end
所以现在除了我的用户和照片模型之外,大多数模型都可以工作。
以下是非常简单的照片模型:
应用程序/模型/photo.rb
class Photo < ApplicationRecord
has_one_attached :pic
end
我也尝试过实际列出掠夺的属性...也没有骰子。
有什么办法可以让它启动并运行吗?
我实际上在基于 github 上已关闭问题的讨论中找到了答案:
https://github.com/activeadmin/activeadmin/discussions/8077
没有人找到“正确”的解决方案......但每个人似乎都在使用的解决方法是从搜查搜索中删除 activestorage。所以就我而言:
应用程序/管理/照片.rb
ActiveAdmin.register Photo do
remove_filter :pic_attachment, :pic_blob
end
另外...如果您有多个附件。 (不要忘记复数“has_many”附件......否则它们将不起作用。)
应用程序/admin/user.rb
ActiveAdmin.register User do
remove_filter :avatar_attachment, :avatar_blob, :cpics_attachments, :cpics_blobs
end
基本上就是这样。 Ransack 将忽略附件和斑点,您终于可以开始新的一天了。 (尽管我的一天已经结束了,我花了很多时间才弄清楚这一点。)