gpt4 book ai didi

ruby-on-rails - 如何在 Ruby on Rails 中使用子 Controller ?

转载 作者:太空宇宙 更新时间:2023-11-03 16:56:48 24 4
gpt4 key购买 nike

我正在学习 RoR,我有一个一般的设计问题,我正在努力解决。我想获得一些关于答案的意见,以确保我遵循某种最佳实践。

我有一个由 3 个子部分组成的页面,我们称它们为 A、B 和 C。某些操作会导致每个子部分通过 AJAX 刷新,所以我想让它们每个都有一个 Controller 操作,允许任何它们单独呈现,没有页面镶边。

我现在构建它的方式是使用具有 4 个操作的 Controller :索引、A、B、C

A、B 和 C 中的每一个都使用 layout=>false 呈现其 View ,因此我可以在需要时通过 AJAX 仅呈现该部分。然后,您有索引,它呈现一些额外的东西以及 A、B 和 C 的 View 。

基本上我想要的是 3 个子 Controller ,以及一个根据需要调用子 Controller 的主 Controller 。或者我认为这就是我想要的。我认为我不想要的是部分 View ,因为我在 Controller 中为 A、B、C 中的每一个都做了一些设置,然后我将不得不在索引 Controller 和索引 Controller 中复制设置代码A、B、C。

我想到的代码是这样的:

我的 Controller .rb:

class MyController < ApplicationController
def index
@aOutput = A
@bOutput = B
@cOutput = C
render //can use @aOutput, @bOutput, @cOutput in the view
end

def A
render :layout => false
end

def B
render :layout => false
end

def C
render :layout => false
end
end

这将使我现在可以在需要完整页面时访问 MyController#index,在我想重新呈现每个子部分的内容时访问 MyController#A 等。

这里的问题是如果代码的结构是这样的,当访问 MyController#index 时你会遇到 DoubleRender 错误。处理这种事情的正确方法是什么?随意覆盖我在这里所做的任何假设,唯一的要求是页面包含三个部分,可以根据需要单独更新而无需重新加载整个页面。

最佳答案

我不确定我是否清楚地理解了这个问题,但我想这就是我认为你的问题所在。

  • 您希望能够只呈现一个 View 而不调用整个 Controller 操作。

    这可以通过使用 render :action => :action_name

  • 来完成
  • 您只想为 ajax 调用呈现一些文本

    使用 respond_to block 来实现这一点。例如。

    def whatever_action

    .... # Your action voodoo here

    respond_to do |format|
    format.html { ... } # If it a normal HTTP request
    format.js {...} # If it's an ajax or JSON request
    end
    end

您提出的设计存在一些基本缺陷,例如未遵守某些 SOLID 设计原则。我强烈建议阅读一本关于 Rails 基础知识的好书。

关于ruby-on-rails - 如何在 Ruby on Rails 中使用子 Controller ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7493534/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com