0

这个问题相对简单但不是很局部,因为它可以外推到很多控制器动作。

我有一个游戏控制器。

它(游戏)有许多行星。

到目前为止,我对每个控制器属于什么感到困惑。我认为必须有一种轨道方式来做到这一点,这将使行星的动作保持在行星控制器中,但我不知道该怎么做。

编辑(注意这甚至还不是游戏):

更具体地说,这是对我坚持的问题的更好描述。我不知道如何编码(或者如果这是一种非常规范的方式)

  • 单击页面上的播放按钮
    • 游戏控制器中的动作运行一些逻辑
    • 然后重定向到行星的索引页面
      • 单击单个行星将执行显示操作并转到显示视图。

所以在这个例子中,我理解了前两点和最后一点。但我不明白进行重定向是否有意义

游戏控制器:

def play
  game =  Game.find(params[:id])
  # do stuff
  redirect planets_path(game)
end

行星控制器:

def index(game)
  @planets = game.planets
end

def show
  @planet = Planet.find(params[:id])
end

实例变量将在相应的视图中使用。此外,planets_path 将链接到路线文件中的行星索引控制器。

4

3 回答 3

1

进行重定向对我来说很有意义。Rails 约定是以RESTful方式构建资源。所以对于游戏资源,它会有一个“玩”的动作。该动作执行其逻辑(我假设它将是游戏的设置逻辑),然后将指导用户启动游戏本身。如果这个初始页面是可用行星的列表,那么将它们重定向到planets_path 是有意义的。

也许您应该重定向到 GameController#show?如果用户在开始播放后可以执行其他操作,我会这样做。否则,我将使用此操作来获取有关游戏本身的配置和其他信息,并为 Game 和 Planet 控制器提供可玩的操作。

如果您将 Planet 设置为 Game 中的嵌套资源,则路由将类似于game_planets_path(game)带有 URL /games/1/planetsforPlanetsController#indexgame_planet_path(game, planet)带有 URL /games/1/planets/1for 的东西Planetscontroller#show。这有助于了解这些行星属于游戏。

于 2013-09-03T05:20:35.737 回答
0

像骨干网这样的前端 js 框架可能是一个解决方案。

它使用后端检索 json 格式的数据,然后更新视图。

这样您就可以将所有行星的动作保存在行星控制器中,只需将 json 格式的响应实现为 API。

于 2013-09-02T05:02:21.347 回答
0

在这里Association Basics您将找到 Rails 中所有关联类型的示例以及如何使用它们

于 2013-09-02T03:33:36.133 回答