2

我正在学习RoR,并且我正在尝试解决一般设计问题。我想在答案上得到一些意见,以确保我遵循某种最佳做法。如何在Ruby on Rails中使用子控制器?

我有一个由3个小节组成的页面,我们称它们为A,B和C.某些操作会通过AJAX刷新其中的每一个,因此我希望让它们每个都有一个控制器操作,允许任何他们单独渲染,没有页面镶边。

我现在已经构成此权利的方法是使用具有4分的动作的控制器:指数,A,B,C

每个A,B和C呈现其与布局视图=> false,以便我可以在需要时通过AJAX渲染那件作品。然后,你有索引,它呈现了一些额外的东西,以及A,B和C的视图。

本质上我想要的是3个子控制器和一个主控制器,根据需要调用子控制器。或者我认为这就是我想要的。我认为我不想要的是部分视图,因为我在控制器中为A,B,C和I中的每一个设置了一些设置,然后必须在控制器中为索引和控制器复制设置代码A,B,C。

我心目中的代码是这样的:

my_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的指数时,我想整个页面,并#myController的A等,我想重新呈现每个小节的内容。

这里的问题是,如果代码的结构如此,访问MyController#索引时将遇到DoubleRender错误。处理这类事情的正确方法是什么?随意炸掉我在这里做出的任何假设,唯一的要求是有三个部分的页面,可以根据需要单独更新,而无需重新加载整个页面。

回答

0

我不确定我是否明白这个问题,但我认为这是我认为你的问题。

  • 你希望能够只渲染视图,而不必调用控制器动作整。

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

  • 来完成你想呈现一些文本,只对阿贾克斯为了达到这个要求

    使用respond_to块。例如。

    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  
    

您提出的设计有像不遵守一些的设计原则基本缺陷。我强烈建议阅读一本关于轨道基础的好书。

+0

此答案并不是非常有帮助。这是一个常见的设计:在页面内部有一些页面可以通过AJAX根据需要进行替换。 我会想象每个可替换的部分对应于Rails动作,并且整个页面也是如此。我只是没有看到如何正确地把这些碎片放在一起。如果这是失败或违反了一些设计原则,我很想知道如何。只是随意地静下来,它违反了一些缩写,并告诉我读一本书根本没用。如果我想读一本书,我不会在这里问。 – LAW

+0

所以你宁愿问一些关于stackoverflow的问题_因为你不想读书?只需使用Google搜索[“实体设计原则”](http://www.google.co.in/search?sourceid=chrome&client=ubuntu&channel=cs&ie=UTF-8&q=SOLID+design+principles&qscrl=1)将为您带来足够的信息第一个结果让你明白我的意思。但看起来你甚至不想这样做。 – Chirantan

相关问题