繁体   English   中英

Rails在控制器之间拆分动作

[英]Rails splitting up actions between controllers

这个问题相对简单,但不是很局限,因为它可以推断出许多控制器动作。

我有一个游戏控制器。

它(一个游戏)有很多行星。

到目前为止,我对每个控制器中的内容感到困惑。 我认为必须有一种方法可以做到这一点,这将使行星的动作保持在行星控制器中,但是我不确定该怎么做。

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

更具体地说,这是我遇到的问题的更好描述。 我不确定如何编写代码(或者这是否做得很合理)

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

因此,在此示例中,我理解了前两点和最后一点。 但我不知道放置重定向是否有意义

游戏控制器:

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也将链接到routes文件中的planets索引控制器。

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

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

如果您将Planet设为Game中的嵌套资源 ,则路线将类似于game_planets_path(game)game_planets_path(game) /games/1/planets对于PlanetsController#indexgame_planet_path(game, planet) ,URL在/games/1/planets/1表示Planetscontroller#show planets belong to game. 这有助于了解行星属于游戏。

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

像骨干之类的前端js框架可能是一个解决方案。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM