【问题标题】:Rails how do you call action in another controller and get the controller code for that action to run? [duplicate]Rails 如何在另一个控制器中调用动作并获取该动作运行的控制器代码? [复制]
【发布时间】:2012-01-08 09:12:53
【问题描述】:

可能重复:
Rails: call another contoller action from a controller

您好,我是 Rails 新手,在我的主页视图中,我想在其他控制器中调用操作。 我正在使用渲染'the/relevant/url'。

这是调用视图,但没有点击正确的控制器操作代码,因此 没有设置视图所期望的视图模型。

我来自 asp.net mvc 世界,在这里我们可以使用渲染动作,这将触发动作的控制器代码。

这可以在 Rails 中完成吗?

如果你做不到,asp.net 做 mvc 模式是不是错了?

非常感谢

更新

我的意图是从主页视图调用另一个控制器操作来获取与主控制器详细信息无关的辅助数据,例如。当日报价或当日热卖。

【问题讨论】:

  • 这可能违背了 MVC 模式。您能否粘贴更多代码或解释您要从主页控制器执行的操作?

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


【解决方案1】:

这被认为是不好的做法。当您在控制器中构建视图时,很大一部分数据将是有状态的。使用render 和模板覆盖可以组合出一个疯狂的解决方案,但基本上,你不应该这样做。

改为使用redirect_to other_controller_action_url(默认情况下将发送 HTTP 302 FOUND),或者更好的是,找出您的代码重复的位置并将其分解到帮助程序或演示程序中。

编辑:如果您想在这样的侧边栏中添加一些东西,您不应该使用整个 rails 堆栈来呈现您的响应的一小部分。相反,您最好使用帮助程序来生成特定数据并使用部分来呈现您的侧边栏。

【讨论】:

  • 您将如何获取与您所在的视图或控制器的主要部分无关的数据?该数据确实属于主视图数据,因此不想添加到视图模型中。它是网页右侧的侧边数据。
  • 使用部分,或使用闪信。
  • 谢谢那部分是如何获取数据的,我需要从数据库或缓存中获取?
  • 是的。如果您有需要以复杂方式使用的瞬态数据,则应考虑将其保存到数据库或缓存(如果这是您预先计算好的)。
【解决方案2】:

你必须使用redirect_to,在rails中从一个控制器动作传递到另一个控制器动作。

【讨论】:

    【解决方案3】:

    “这是在调用视图,但没有点击正确的控制器操作代码,因此没有设置视图所期望的视图模型。”

    非常混乱。

    我会使用一两本书来阅读更多内容,例如使用 Rails 进行敏捷 Web 开发和 O'Reilly Ruby 书。

    从浏览器页面开始,即查看。所以用户点击一个链接,它调用一个控制器动作,做一些事情。它可以用 Controller.action 调用其他控制器的动作来做事。它显示的 html 将来自初始控制器渲染语句,除非它重定向到另一个执行渲染的控制器。

    当你来自 asp、php 等时,rails 意味着重新理解你的理解,这通常需要一段时间。我来自冷聚变,不得不经历这个过程。

    【讨论】:

      猜你喜欢
      • 2011-08-11
      • 2011-09-30
      • 1970-01-01
      • 2010-09-29
      • 2013-10-16
      • 1970-01-01
      • 2013-05-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多