У меня есть две модели/контроллеры, которые по существу дублируют данные (только на разных страницах). Когда я перебирать коллекцию на одном из контроллеров, она работает так же, как задумано, однако при запуске коллекции через парциальное на другой контроллер, это создает еще один «объект»Правильная рендеринг Rails частичная по набору предметов
def show (users_controller.rb)
...
@missions = @user.missions
@mission = current_user.missions.build
...
end
def index (missions_controller.rb)
...
@missions = @user.missions
@mission = current_user.missions.build
...
end
Когда я называю render @missions
(app/views/mission/_mission.html.erb) на файлах show.html.erb
и index.html.erb
. Он работает по назначению на Users_controller
, но создает дополнительный «объект» на Missions_controller
. Кажется, что при рендеринге коллекции отображаются как переменные @mission
, так и @missions
.
Почему и как я могу это исправить? Я попытался переместить частичный файл в общий каталог просмотра, но проблема остается. Я предполагаю, что это связано с тем, как я назвал переменные экземпляра? Я супер в тупике. Спасибо, ребята
ничего себе, это сработало как очарование! im все еще не уверен почему. Гектометр Имеет ли это какое-то отношение к тому, что вызов '@ mission' происходит от mission_controller? Я смущен тем, почему вызов этой коллекции будет включать переменную '@ mission', а также ... – pruett
Таким образом, user.missions фактически не оценивает, пока не будет использован; он возвращает прокси-сервер ассоциации, который оценивается только после того, как на него вызывается метод, для которого требуются его данные. Поэтому, когда вы говорите @ user.missions, вы говорите: «В какой-то момент, но не сейчас, дайте мне все миссии, связанные с этим пользователем». Затем сразу же вы создаете новую ассоциацию для этого пользователя. Когда вы фактически используете миссии, он выполняет запрос и возвращает все миссии для этого пользователя, ВКЛЮЧАЯ тот, который вы только что создали. Вызов .all немедленно возвращает только те миссии, которые уже сохранены и построены. – Veraticus
спасибо ... его создание немного больше смысла. Любопытно, почему он работает по назначению на одном контроллере, но не на другом? разве он не должен выполнять одно и то же? – pruett