我有两个模型/控制器,它们基本上是复制数据(仅在不同的页面上)。当我在其中一个控制器上迭代一个集合时,它就像预期的那样工作,但是当我通过另一个控制器上的partial运行集合时,它会创建另一个“对象”
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
和show.html.erb
文件上调用index.html.erb
(app / views / missions / _mission.html.erb)时。它在Users_controller
上按预期工作,但在Missions_controller
上创建了一个额外的“对象”。渲染集合时,它似乎在控制器中呈现@mission
和@missions
变量。
为什么以及如何解决此问题?我已经尝试将部分移动到共享视图目录,但问题仍然存在。我假设它与我如何命名我的实例变量有关?我很难过。谢谢你们
答案 0 :(得分:1)
这只是猜测,但我想这可能会发生,因为您正在构建的任务包含在@ user.missions中。标准在实际使用之前不会被评估(通过调用.all或.each或者其他东西),所以通过使用current_user.missions.build,你将在@ user.missions的末尾添加一个空任务...假设current_user和@user是相同的。
所以你可以通过改变对@missions = @user.missions.all
的调用来解决这个问题,这会迫使它在建立的任务被添加到最后之前立即进行评估。
正如我所说,只是一个猜测!