【问题标题】:rails 3 rendering view without actionrails 3渲染视图没有动作
【发布时间】:2013-12-06 23:03:33
【问题描述】:

我为特定操作定义了路线并创建了一个链接。我也创建了相应的视图,但没有代码定义控制器操作方法。单击链接时仍会呈现视图。也就是说,视图是在实际不存在操作的情况下呈现的。

有什么解释吗?

【问题讨论】:

    标签: ruby-on-rails render


    【解决方案1】:

    是的,即使没有相应的操作存在,视图也会被渲染,它会像为相同的定义路由一样工作。但这不是一个好习惯!

    【讨论】:

    • 那么什么时候触发了未定义的动作错误?仅当相应视图不存在时??
    • @RSB,这在尝试呈现静态页面时很有用
    • 页面非静态时出现未定义的操作错误,我同意@Virtual
    【解决方案2】:

    为了让 Rails 呈现视图,您需要定义一个控制器(不一定具有相应的方法),一个引用视图和视图的路由。仅当您需要向视图提供数据时,才需要向控制器添加方法。

    http://guides.rubyonrails.org/layouts_and_rendering.html#rendering-by-default-convention-over-configuration-in-action 对此有相当详尽的解释

    【讨论】:

      【解决方案3】:

      Rails 不希望您为 config/routes.rb 文件中的每个路由定义控制器操作。您可能知道您可以定义一个操作,也可以像这样将其留空:

      class PostsController  < ApplicationController
      
        def index
        end
      
      end
      

      对于任何 Web 应用程序,保持这种状态是不寻常的,因为实例变量、数据库事务等的代码最终会填充您的大部分控制器操作。对于纯静态页面,动作仍应定义但应为空。

      【讨论】:

        【解决方案4】:

        即使您为该操作定义了过滤器,它也会执行,无论您是否定义了该操作,正如 Glen 通过他的链接提到的那样,rails 会自动呈现与文件夹内的操作同名的视图,名为 that控制器(位于视图文件夹中)。

        空动作相当于没有动作,但规定是出于某些原因(如可理解和可维护性)定义动作。

        参考:这里link

        请注意,上面示例中的空方法可以正常工作 因为 Rails 默认会渲染 new.html.erb 视图,除非 行动另有说明

        因此定义了明确的 HTTP 响应,以防您必须更改默认响应。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-04-14
          • 1970-01-01
          • 1970-01-01
          • 2011-09-22
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多