Проверьте, является ли слово единственное или множественное число в Ruby on Rails
Быстрый вопрос.
Как я могу проверить слово, чтобы увидеть, является ли оно единственным или множественным?
Мне бы очень хотелось:
test_singularity('word') # => true
test_singularity('words') # => false
Я уверен, что рельсы способны!
Спасибо.
Ответы
Ответ 1
Хорошо в рельсах вы можете сделать сравнение string#singularize|#pluralize
, чтобы вернуть значение true или false.
Но я бы подумал, что из-за природы самого языка это может потребоваться для резервного копирования, чтобы быть полностью точным.
Вы можете сделать что-то вроде этого
def test_singularity(str)
str.pluralize != str && str.singularize == str
end
Но чтобы понять, насколько точно, я быстро набрал слова.
%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
На самом деле я был немного удивлен, так как "платье" получило плюрализующе правильно, но когда оно проходит через #singularize, оно немного впадает в заблуждение.
'dress'.pluralize # => dresses
'dress'.singularize # => dres
Ответ 2
В большинстве случаев я никогда не проверяю сингулярность или множественное число, я просто конвертирую его в единственную или множественную форму, которую я требую.
В Rails 2.3.x это возможно, написав что-то вроде этого
plural_form = org_word.singularize.pluralize
singular_form = org_word.pluralize.singularize
Работая над этим, можно легко выполнить рабочую функцию:
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
который дает следующий результат:
word : true
words : false
rail : true
rails : false
dress : true
dresses : false
В Rails 4, с указанными словами, теперь намного проще. Вы можете просто сделать
plural_form = org_word.pluralize
singular_form = org_word.singularize
и, следовательно, функция становится намного проще:
require 'active_support'
def is_singular?(str)
str.singularize == str
end
Ответ 3
Ни рубины, ни рельсы не имеют специального метода для тестирования "плюрализма" слов.
Как сказал nowk, вы можете сделать это самостоятельно, сравнивая с word.pluralize
и word.singularize
. Это даст вам быстрый и дешевый и, как правило, хороший способ тестирования. Однако он будет терпеть неудачу.
Если вам нужна более высокая точность, вам нужно использовать камень Ruby Linguistics, который может правильно одеваться и одеваться (но это тяжелее).