【问题标题】:Rails splitting up actions between controllersRails 在控制器之间拆分操作
【发布时间】:2013-09-05 01:32:15
【问题描述】:

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

我有一个游戏控制器。

它(游戏)有许多行星。

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

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

更具体地说,这里是对我遇到的问题的更好描述。我不确定如何编写代码(或者这是一种非常正常的方式)

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

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

游戏控制器:

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 将链接到路线文件中的行星索引控制器。

【问题讨论】:

  • Rails 用于使用 MVC 范例构建网站,它不太适合基于浏览器的视频游戏。
  • 我将大量使用 JavaScript,但我的问题是如何将其融入 MVC 框架
  • 这怎么太宽泛了?我想让它更具体,但对我来说似乎很具体

标签: ruby-on-rails model-view-controller controller ruby-on-rails-4


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

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

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

      如果您在游戏中将 Planet 设为 nested resource,那么路由将类似于 game_planets_path(game) 与 URL /games/1/planets 对应 PlanetsController#indexgame_planet_path(game, planet) 与 URL /games/1/planets/1 对应 Planetscontroller#show。这有助于了解这些行星属于那个游戏。

      【讨论】:

      • 嵌套资源思路不错,正是我需要的。我有一个 play 动作的原因是因为我已经在使用 show 动作来显示有关游戏的详细信息,这将是一个独立的动作
      猜你喜欢
      • 2010-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-19
      • 1970-01-01
      • 2015-03-31
      相关资源
      最近更新 更多