在收集项目时正确呈现Rails

时间:2012-02-23 05:33:57

标签: ruby-on-rails partials

我有两个模型/控制器,它们基本上是复制数据(仅在不同的页面上)。当我在其中一个控制器上迭代一个集合时,它就像预期的那样工作,但是当我通过另一个控制器上的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 @missionsshow.html.erb文件上调用index.html.erb(app / views / missions / _mission.html.erb)时。它在Users_controller上按预期工作,但在Missions_controller上创建了一个额外的“对象”。渲染集合时,它似乎在控制器中呈现@mission@missions变量。

为什么以及如何解决此问题?我已经尝试将部分移动到共享视图目录,但问题仍然存在。我假设它与我如何命名我的实例变量有关?我很难过。谢谢你们

1 个答案:

答案 0 :(得分:1)

这只是猜测,但我想这可能会发生,因为您正在构建的任务包含在@ user.missions中。标准在实际使用之前不会被评估(通过调用.all或.each或者其他东西),所以通过使用current_user.missions.build,你将在@ user.missions的末尾添加一个空任务...假设current_user和@user是相同的。

所以你可以通过改变对@missions = @user.missions.all的调用来解决这个问题,这会迫使它在建立的任务被添加到最后之前立即进行评估。

正如我所说,只是一个猜测!