Я использую Ruby 1.8.7 с Rails 3.0.1, и у меня возникла проблема, основной причиной которой является операция «Array === object».Я видел такое же поведение ранее в классе своего собственного создания и программировал его, не используя оператор "===" (я предполагал, что в моих знаниях Ruby есть какой-то недостаток, который все еще довольно ограничен).Но теперь, когда это происходит внутри ActionPack, мне нужно что-то с этим поделать.
Это появилось, когда FormHelper «fields_for» действовал не так, как должен.Следующий фрагмент кода представления («<%%>» удален для улучшения читабельности):
form_for @coupon do |f|
...
f.fields_for @coupon.participants do |cp|
...
end
end
выдал ошибку «ActionView :: Template :: Error (неопределенный метод` имя_модели` для Array: Class):"внутри вспомогательного метода form_for.Я определил, что выполняется неправильная ветвь команды case, установил точку останова и начал тестирование.Вот результаты:
/Library/Ruby/Gems/1.8/gems/actionpack-3.0.1/lib/action_view/helpers/form_helper.rb:1152
case record_or_name_or_array
(rdb:1) pp record_or_name_or_array.instance_of? Array
true
(rdb:1) pp Array === record_or_name_or_array
false
(rdb:1) pp Array.object_id
2148267660
(rdb:1) pp record_or_name_or_array.class.object_id
2148267660
Это довольно определенно показывает, что хотя "record_or_name_or_array" определенно является массивом, "Array === record_or_name_or_array" возвращает false.
Кстати, если вы подозреваете, что «@ f.fields_for» - неправильный синтаксис, я пробовал как с «@f», так и без него.и получил тот же результат.Я также перезапустил RoR и мою машину, и результаты остались без изменений.