Я пересоздал ваш сценарий в пустом приложении rails с кодом маршрутизации, и вы указали тест, и он работал без проблем, как и должно быть. Я вставлю сюда свой код контроллера, так как это единственная часть, которую вы пропустили:
class MessagesController < ApplicationController
def index
@messages = User.find(params[:user_id]).messages
end
end
Если вы делаете в основном то же самое, тогда проблема маршрутизации может быть вызвана конфликтом в вашем файле маршрутизации, что, как я подозреваю, может иметь место. Вы можете опубликовать это? К вашему сведению, я написал статью о тестировании ваших маршрутов , и это было бы очень хорошей идеей, потому что это отлавливало бы ошибки маршрутизации на ранних этапах, прежде чем они столкнутся с контроллерами.
В любом случае, если вы можете опубликовать свои маршруты, я могу посмотреть.
ОБНОВЛЕНИЕ: После просмотра ваших маршрутов, есть пара конфликтов. Вы можете иметь сообщения в качестве подресурса более чем одного другого ресурса, но в вашем контроллере сообщений вам придется учитывать возможность либо params [: me_id], либо params [: profile_id]. Похоже, что они оба на самом деле пользовательская модель, поэтому это может быть так просто:
@user = User.find(params[:me_id] || params[:profile_id])
и вы, вероятно, захотите абстрагировать это в метод, который вы вызываете с помощью before_filter
.
Другая проблема заключается в том, что у вас есть два перекрывающихся профиля профиля, и я не уверен, почему. Я не думаю, что это ошибка маршрутизации в тесте, потому что тесты в любом случае обходят механизм маршрутизации. Я думаю, что это ошибка в представлении индекса, потому что оно, вероятно, содержит ссылки на сообщения с неправильно отформатированными URL. Если у вас есть ссылка на сообщение, например, и у вас есть объект @profile, вам нужно будет вызывать их следующим образом:
<%= link_to message.name, profile_message_path(@profile, @message) %>
Однако, если вы используете не вложенные пути, например message_path(@message)
, произойдет сбой, так как нет вложенных маршрутов сообщений.