【问题标题】:Ransacker and Arel on associations fieldsRansacker 和 Arel 在关联领域
【发布时间】:2017-03-28 13:53:01
【问题描述】:

我有 Project::Contribution 那个 belongs_to UserUserhas_oneUser::Profile.

first_namelast_nameUser::Profile 中包含的字段

我想创建一个 ransacker,允许我使用他们的用户个人资料 first_namelast_name 过滤我的贡献。

如何做到这一点?

这是我迄今为止尝试过的:

# admin/contribution.rb
filter :user_full_name_cont

# models/user.rb
ransacker :full_name do |parent|
  Arel::Nodes::InfixOperation.new('||', parent.table[:profile_first_name], parent.table[:profile_last_name]) # error
end

这失败是因为:parent.table[:profile_first_name]parent.table[:profile_last_name] 因为我无法像这样访问 profile 表。

【问题讨论】:

    标签: ruby-on-rails ruby activeadmin arel ransack


    【解决方案1】:

    终于找到解决办法了:

    # models/user/profile.rb
      ransacker :full_name, formatter: proc { |v| v.mb_chars.downcase.to_s } do |parent|
        Arel::Nodes::NamedFunction.new('LOWER',
         [Arel::Nodes::NamedFunction.new('concat_ws',
          [Arel::Nodes.build_quoted(' '), parent.table[:first_name], parent.table[:last_name]])])
      end
    
    # admin/user.rb
    filter :user_profile_full_name_cont
    

    【讨论】:

    • 我遇到了同样的错误,但我使用的是 InfixOperation insted of NamedFunction。这解决了我的问题。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2012-03-31
    • 1970-01-01
    • 1970-01-01
    • 2016-07-29
    • 2014-01-15
    • 2017-06-10
    • 1970-01-01
    • 2011-07-01
    相关资源
    最近更新 更多