繁体   English   中英

Rails 6 ransacker 过滤用户的多态关联

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM