aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord
diff options
context:
space:
mode:
authorRafael Mendonça França <rafaelmfranca@gmail.com>2013-12-18 12:38:29 -0800
committerRafael Mendonça França <rafaelmfranca@gmail.com>2013-12-18 12:38:29 -0800
commit4779aaa1d191b0306eaf25658b4c6a611dd9a5c2 (patch)
treeb5ba2abd36eda3edc6692b944d8a78dfe2aa517b /activerecord
parent6d894cf3ea67192e8be3946b0d97e90fcae4cd0f (diff)
parentee738f960439e511285bc53b7207cebacda8db36 (diff)
downloadrails-4779aaa1d191b0306eaf25658b4c6a611dd9a5c2.tar.gz
rails-4779aaa1d191b0306eaf25658b4c6a611dd9a5c2.tar.bz2
rails-4779aaa1d191b0306eaf25658b4c6a611dd9a5c2.zip
Merge pull request #13386 from rono23/fix-to-param
Fix to_param when attribute has multibyte character
Diffstat (limited to 'activerecord')
-rw-r--r--activerecord/lib/active_record/integration.rb6
-rw-r--r--activerecord/test/cases/integration_test.rb6
2 files changed, 10 insertions, 2 deletions
diff --git a/activerecord/lib/active_record/integration.rb b/activerecord/lib/active_record/integration.rb
index 27576b1e61..31e2518540 100644
--- a/activerecord/lib/active_record/integration.rb
+++ b/activerecord/lib/active_record/integration.rb
@@ -98,8 +98,10 @@ module ActiveRecord
super()
else
define_method :to_param do
- if (default = super()) && (result = send(method_name).to_s).present?
- "#{default}-#{result.squish.truncate(20, separator: /\s/, omission: nil).parameterize}"
+ if (default = super()) &&
+ (result = send(method_name).to_s).present? &&
+ (param = result.squish.truncate(20, separator: /\s/, omission: nil).parameterize).present?
+ "#{default}-#{param}"
else
default
end
diff --git a/activerecord/test/cases/integration_test.rb b/activerecord/test/cases/integration_test.rb
index 07ffcef875..95b028e59e 100644
--- a/activerecord/test/cases/integration_test.rb
+++ b/activerecord/test/cases/integration_test.rb
@@ -46,6 +46,12 @@ class IntegrationTest < ActiveRecord::TestCase
assert_equal '4-ab-ab-ab-ab-ab-ab', firm.to_param
end
+ def test_to_param_class_method_multibyte_character
+ firm = Firm.find(4)
+ firm.name = "戦場ヶ原 ひたぎ"
+ assert_equal '4', firm.to_param
+ end
+
def test_to_param_class_method_uses_default_if_blank
firm = Firm.find(4)
firm.name = nil