测试Ruby on Rails中的单词是单数还是复数

doc*_*nge 17 ruby-on-rails helpers pluralize singular

快问.

如何测试一个单词以查看它是单数还是复数?

我真的很喜欢:

test_singularity('word') # => true
test_singularity('words') # => false
Run Code Online (Sandbox Code Playgroud)

我打赌铁路有能力!

谢谢.

now*_*owk 21

在rails中,您可以进行string#singularize|#pluralize比较以返回true或false值.

但我认为由于语言本身的性质,这可能需要一些备份才能完全准确.

你可以这样做

def test_singularity(str)
  str.pluralize != str && str.singularize == str
end
Run Code Online (Sandbox Code Playgroud)

但是为了看到准确性,我跑了一套快速的话.

%w(word words rail rails dress dresses).each do |v|
  puts "#{v} : #{test_singularity(v)}"
end

word : true
words : false
rail : true
rails : false
dress : false
dresses : false
Run Code Online (Sandbox Code Playgroud)

实际上我有点惊讶,因为'连衣裙'确实得到了多元化,但是当它穿过#singularize时会遇到一些障碍.

'dress'.pluralize # => dresses
'dress'.singularize # => dres
Run Code Online (Sandbox Code Playgroud)

  • "dress".singularize问题在这里得到解决:https://rails.lighthouseapp.com/projects/8994/tickets/2399-incorrect-inflectors-for-business-or-ness#ticket-2399-5 (2认同)

nat*_*vda 9

大多数时候我从不测试奇点或复数,我只是将其转换为我需要的单数或复数形式.

Rails 2.3.x中,这是可能的,写这样的东西

plural_form = org_word.singularize.pluralize
singular_form = org_word.pluralize.singularize
Run Code Online (Sandbox Code Playgroud)

进一步研究这个问题,工作功能很容易提供:

require 'active_support'

def is_singular?(str)
  str.pluralize.singularize == str
end


%w(word words rail rails dress dresses).each do |v|
  puts "#{v} : #{is_singular?(v)}"
end
Run Code Online (Sandbox Code Playgroud)

它给出了以下输出:

word : true
words : false
rail : true
rails : false
dress : true
dresses : false
Run Code Online (Sandbox Code Playgroud)

Rails 4中,使用给定的单词,现在更容易了.你可以这样做

plural_form = org_word.pluralize
singular_form = org_word.singularize
Run Code Online (Sandbox Code Playgroud)

因此功能也变得更容易:

require 'active_support'

def is_singular?(str)
  str.singularize == str
end
Run Code Online (Sandbox Code Playgroud)