[英]Rails 6 ransacker to filter through User's polymorphic association
我正在尝试在 Active Admin Conversation
文件中创建一个过滤器,它将通过他的全名向我显示用户(用户全名 = user.first_name + user.last_name)。 User 和 Conversation 通过多态关联关联,如下所示:
class User < ApplicationRecord
has_many :conversations, as: :sendable
end
class Conversation < ApplicationRecord
belongs_to :sendable, polymorphic: true
end
因为 ActiveAdmin 在幕后使用 Ransack,我试图在User
模型中声明 ransack 并在admin/conversations.rb
引用它,如下所示:
#admin/conversations.rb
ActiveAdmin.register Conversation do
filter :sendable_of_User_type_full_name_cont, as: :string, label: 'User (name)'
end
#models/user.rb
class User < ApplicationRecord
...
ransacker :full_name, formatter: proc { |v| v.strip } do |parent|
"#{parent.table[:first_name]} #{parent.table[:last_name]}"
end
end
但我收到一个错误:
Admin::ConversationsController#index 中的 NoMethodError
#String:0x00007fa90ceb6560 的未定义方法“匹配”
你的意思? 比赛比赛?
提取的源代码(围绕第 33 行): 31 arel_pred = arel_predicate_for_attribute(attribute) 32 arel_values = formatted_values_for_attribute(attribute) 33 predicate = attr_value_for_attribute(attribute).public_send(arel_pred)(arel_pred), 33_predicate if3)_value=5(in.4right3predicate) predicate.right.map 做 |pr|
对于那些遇到类似问题的人 - 我在文档中找到了一个很好的解释
Ransnacker 相应的更改将起作用:
# models/users.rb
ransacker :full_name do |parent|
Arel::Nodes::InfixOperation.new('||',
parent.table[:first_name], parent.table[:last_name])
end
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.