является защищенным атрибутом по умолчанию), если вы не установили атрибут type явно.

редставления Rails и контроллеры усеяныredirect_to, link_to, а такжеform_for вызовы метода. Иногдаlink_to а такжеredirect_to явные в путях, которые они связывают (например,link_to 'New Person', new_person_path), но много раз пути неявные (например,link_to 'Show', person).

Я добавляю некоторые наследования таблиц (STI) к моей модели (скажем,Employee < Person), и все эти методы ломаются для экземпляра подкласса (скажем,Employee); когда рельсы выполняютсяlink_to @person, это ошибки сundefined method employee_path' for #<#<Class:0x000001022bcd40>:0x0000010226d038>, Rails ищет маршрут, определенный именем класса объекта-сотрудника. Эти маршруты сотрудников не определены, и нет контроллера сотрудников, поэтому действия также не определены.

Этот вопрос был задан ранее:

ВПереполнение стекаответ заключается в том, чтобы отредактировать каждый экземпляр link_to и т. д. во всей кодовой базе и явно указать путьНаПереполнение стека опять же, два человека предлагают использоватьroutes.rb сопоставить ресурсы подкласса с родительским классом (map.resources :employees, :controller => 'people'). Верхний ответ в этом же вопросе SO предлагает приведение типов каждого объекта экземпляра в кодовой базе с использованием.becomesЕще один вПереполнение стекалучший ответ - в лагере «Повтори себя» и предлагает создать дублированные леса для каждого подкласса.Вот тот же вопрос снова в SO, где верхний ответ кажется просто неправильным (Rails magic Just Works!)В другом месте в Интернете я нашелэтот блог где F2Andy рекомендует редактировать путь повсюду в коде.На блогеНаследование в одной таблице и маршруты RESTful при проектировании логической реальности рекомендуется сопоставить ресурсы для подкласса с контроллером суперкласса, как в ответе SO 2 выше.Алекс Рейснер имеет постНаследование в одной таблице в Rails, в котором он выступает против отображения ресурсов дочерних классов в родительский класс вroutes.rbПоймать только обрывы маршрутизации отlink_to а такжеredirect_to, но не изform_for, Поэтому он рекомендует вместо этого добавить метод в родительский класс, чтобы подклассы лгали об их классе. Звучит хорошо, но его метод дал мне ошибкуundefined local variable or method `child' for #.

Таким образом, ответ, который кажется наиболее элегантным и имеет наибольшее согласие (но это еще не всеэто ни элегантный, ниэто большой консенсус), это добавить ресурсы к вашемуroutes.rb, За исключением того, что это не работает дляform_for, Мне нужна ясность! Чтобы выбрать варианты выше, мои варианты

сопоставить ресурсы подкласса с контроллером суперкласса вroutes.rb (и надеюсь, мне не нужно вызывать form_for для любых подклассов)Переопределить рельсы внутренними методами, чтобы классы лгали друг другуОтредактируйте каждый экземпляр в коде, где путь к действию объекта вызывается неявно или явно, либо изменяя путь, либо приводя тип к объекту.

Со всеми этими противоречивыми ответами мне нужно решение. Мне кажется, что нет хорошего ответа. Это провал в дизайне рельсов? Если так, то это ошибка, которая может быть исправлена? Или, если нет, то я надеюсь, что кто-то может объяснить мне это, показать мне плюсы и минусы каждого варианта (или объяснить, почему это не вариант), какой из них правильный и почему. Или есть правильный ответ, который я не нахожу в Интернете?

Ответы на вопрос(0)

Ваш ответ на вопрос