Основываясь на этом документация, кажется, что генераторы URL-адресов rails принимают полный объект для генерации URL-адреса.
@comment = Comment.find(1)
comment_url(@comment, { host: 'google.com' } ) => google.com/comments/1
Это верно в моей производственной среде. Однако в моей среде разработки, когда я пытаюсь сгенерировать URL-адрес таким образом, я получаю
ActionController::UrlGenerationError: No route matches / missing required keys: [:id]
ошибка.
В моей среде разработки я могу успешно сгенерировать URL-адрес, используя вместо этого идентификатор объекта.
comment_url(@comment.id, { host: 'google.com' } ) => google.com/comments/1
Мне кажется, что на основе конфигурации где-то вы должны иметь возможность передавать объекты или идентификаторы в генераторы URL-адресов в рельсах. Мой google foo не помог мне понять, что это за конфигурация. Кто-нибудь знает, почему я могу видеть это различное поведение в производстве и разработке одного и того же приложения?





Нет никакой разницы в том, что мы говорим о средах, неважно, делаете ли вы это на производстве или в разработке.
Единственное, что отличается, - это данные, возможно, @comment о разработке не заполнен объектом с идентификатором, поэтому он не работает в этом примере.
Оказалось, что метод to_param был перезаписан в модели @comment для сериализации атрибута hash_id. Этот атрибут присутствовал в производстве, но не в разработке. Спасибо за этот ответ, он направил меня по правильному пути.
Я думаю, что должна быть разница в конфигах между двумя средами. @comment о разработке имеет идентификатор. (Получено с помощью
@comment = Comment.find(1). У меня вопрос - какие существуют конфигурации, которые изменяют сигнатуру методов генераторов URL-адресов в рельсах?