Make ransacker_args test work with Sqlite3,

simplify a bit, and rename things for clarity.
This commit is contained in:
jonatack 2015-03-21 15:49:25 +05:30
parent 51262afe66
commit 4ac02e5f14
2 changed files with 13 additions and 10 deletions

View File

@ -319,19 +319,22 @@ module Ransack
c: [{
a: {
'0' => {
name: 'with_passed_arguments', ransacker_args: [10, 100]
name: 'with_arguments', ransacker_args: [10, 100]
}
},
p: 'cont',
v: ['Rails has been released']
v: ['Passing arguments to ransackers!']
}]
)
puts "
#{s.result.to_sql}"
expect(s.result.to_sql).to match(
/CHAR_LENGTH\(articles.body\) BETWEEN 10 AND 100/
/LENGTH\(articles.body\) BETWEEN 10 AND 100/
)
expect(s.result.to_sql).to match(
/LIKE \'\%Rails has been released\%\'/
)
/LIKE \'\%Passing arguments to ransackers!\%\'/
)
expect { s.result.first }.to_not raise_error
end
end

View File

@ -67,17 +67,17 @@ class Person < ActiveRecord::Base
Arel.sql('people.id')
end
ransacker :with_passed_arguments, args: [:parent, :ransacker_args] do |parent, args|
min_body, max_body = args
sql = <<-SQL
ransacker :with_arguments, args: [:parent, :ransacker_args] do |parent, args|
min, max = args
query = <<-SQL
(SELECT MAX(articles.title)
FROM articles
WHERE articles.person_id = people.id
AND CHAR_LENGTH(articles.body) BETWEEN #{min_body} AND #{max_body}
AND LENGTH(articles.body) BETWEEN #{min} AND #{max}
GROUP BY articles.person_id
)
SQL
Arel.sql(sql.squish)
Arel.sql(query)
end
def self.ransackable_attributes(auth_object = nil)