ransack icon indicating copy to clipboard operation
ransack copied to clipboard

Bug?: ransackable_attributes Fails with Symbol Array

Open tatematsu-k opened this issue 1 year ago • 2 comments

When using the ransackable_attributes method in ActiveRecord, passing an array of symbols causes the search conditions for the corresponding attributes to be ignored. However, passing an array of strings works as expected.

Steps to Reproduce

1: Create a migration for a users table with a name column:

class CreateUsers < ActiveRecord::Migration[7.1]
  def change
    create_table :users do |t|
      t.string :name

      t.timestamps
    end
  end
end

2: Define the User model with ransackable_attributes returning a symbol array:

class User < ApplicationRecord
  def self.ransackable_attributes(auth_object = nil)
    [:name]
  end
end

3: Attempt to perform a Ransack query with a condition on the name attribute:

User.ransack(name_cont: "hoge").result.to_sql

Actual Behavior

The generated SQL query ignores the condition for name:

SELECT "users".* FROM "users"

I expected SELECT "users".* FROM "users" WHERE "users"."name" LIKE '%hoge%'

===

The code below returned the expected results:

class User < ApplicationRecord
  def self.ransackable_attributes(auth_object = nil)
    ["name"]
  end
end

=== Ruby version: 3.3.6 Rails version: 7.2.2 ransack version: 4.2.1

tatematsu-k avatar Nov 21 '24 04:11 tatematsu-k

Just found out I had the same issue 😅 Maybe it should warn if any element in the array is not a string if the intended behavior only works for strings 🤔

rhiroyuki avatar Sep 22 '25 12:09 rhiroyuki

Just hit this issue today. I agree this change would be very helpful.

Would it be difficult to update this to accept either strings or symbols?

strouptl avatar Oct 16 '25 21:10 strouptl