【问题标题】:help with rails render action vs routing帮助 Rails 渲染动作与路由
【发布时间】:2010-12-11 11:11:43
【问题描述】:

我正在使用我在网上找到的一些图像裁剪示例,现在我感到困惑。我的控制器中实际上没有“裁剪”方法。相反(按照指南)我放了一个

 render :action => 'cropping', :layout=> "admin"

在我的创建方法中。这会呈现一个名为 cropping.html.erb 的视图页面。它工作正常,但我不知道如何链接或呈现该页面,就像我想直接点击 URL 或按下按钮来重新裁剪图像一样。如果我希望能够做到这一点,我是否应该在我的控制器中创建一个裁剪方法并通过路由连接它,或者在我的视图中是否有办法链接到呈现裁剪操作的同一位置?

抱歉造成混乱:)教程的第一个版本确实有裁剪方法并没有帮助,他将其删除!关于为什么一种方法优于另一种方法的任何解释都会很棒。谢谢!!

【问题讨论】:

  • 我认为您应该从一个更基本的教程开始,在决定绕过它们之前解释什么是控制器和操作。

标签: ruby-on-rails ruby routing controller render


【解决方案1】:

在您的情况下,您通常会将文件命名为 create.html.erb,这是默认情况下rails 将在其中查找文件的位置。编写如下代码:

render :action => 'viewname'

如果您想在一种情况下渲染一个文件,而在另一种情况下渲染另一个文件,通常会发生这种情况。

【讨论】:

    【解决方案2】:

    执行此操作的最佳方式取决于您打算如何使用裁剪模板以及相关的控制器逻辑。在继续之前,您会发现阅读 render documentation 很有用。

    • 如果您只打算以一种方式使用裁剪模板。使用与引用操作无关的相同控制器逻辑(如;不是表单提交的一部分)。然后你应该定义一个新的动作和路线。您可以选择是要创建命名路由还是只是将新路由添加到 routes.rb 中的资源定义中

      根据您定义路线的方式,您可以使用link_to "Cropping", cropping_url

    • 如果您要从多个控制器渲染它,每个控制器在渲染模板之前都需要不同的准备。

      render :template => 'path/template_name' 
      

      其中 path 是来自 TEMPLATE_ROOTRAILS_ROOT/app/views 除非另有定义)的相对路径,模板名称是不带尾随 .html.erb/.rhtml 的文件名

    • 如果您想将裁剪呈现为另一个视图的一部分,您可以将其设为局部。

      要使其成为部分文件,只需将文件重命名为“_cropping.html.erb”。现在可以使用

      从任何视图调用它
      <%=render :partial => 'path/partial_name' %>
      

      同样,path 是 TEMPLATE_ROOT 相对于您的部分的路径。 partial_name 是部分的文件名,在省略前导下划线和尾随 .html.erb 或 .rhtml 之后。

    注意:在任何涉及模板路径的解决方案中,如果调用控制器与路径匹配,则可以省略该路径。即:如果模板路径是从UsersController调用的'users/cropping.html.erb'。

    【讨论】:

      最近更新 更多