【问题标题】:Rails - Ransack - Reorder AttributesRails - Ransack - 重新排序属性
【发布时间】:2023-04-25 15:15:01
【问题描述】:

我在我的 Rails 应用程序中使用 Ransack gem。它按预期工作,但是如何重新排序属性选择下拉框中的属性列表?对我来说不幸的是,用户的“姓名”位于列表底部附近,而理想情况下它应该位于顶部。

.field
  = f.attribute_fields do |a|
    = a.attribute_select associations: [:terms, :contact_informations, :educational_experiences, :home_towns, :local_residences, :permanent_addresses, :emergency_contact_informations]

以上是我当前的属性选择,现在它列出了所有用户属性,然后是每个关联的属性。在我的模型中,我使用以下内容来过滤掉一些属性。

def self.ransackable_attributes(auth_object = nil)
    super - ['id', 'first_name', 'middle_name', 'last_name', 'created_at', 'updated_at', 'encrypted_password', 'reset_password_token', 'reset_password_sent_at', 'remember_created_at',
              'sign_in_count', 'current_sign_in_at', 'last_sign_in_at', 'current_sign_in_ip', 'last_sign_in_ip']
  end

【问题讨论】:

    标签: ruby-on-rails ransack


    【解决方案1】:

    我在 ransack github 存储库中找到了这个:

    def ransackable_attributes(auth_object = nil)
      column_names + _ransackers.keys
    end
    

    所以在我的模型中,我可以通过做一些不同的事情来覆盖这个方法。

      def self.ransackable_attributes(auth_object = nil)
        column_names.unshift(column_names.delete('name', 'role')) - ['id', 'first_name', 'middle_name', 'last_name', 'created_at', 'updated_at', 'encrypted_password', 'reset_password_token', 'reset_password_sent_at', 'remember_created_at',
                      'sign_in_count', 'current_sign_in_at', 'last_sign_in_at', 'current_sign_in_ip', 'last_sign_in_ip']+ _ransackers.keys
      end
    

    由于column_names 只是一个数组,我可以从数组中删除一个元素,然后用unshift 添加它。如果有人有更好的解决方案,请仍然在这里发布。

    【讨论】: