【问题标题】:How to render a Rails action without layout in html format using Ajax?如何使用 Ajax 以 html 格式呈现没有布局的 Rails 动作?
【发布时间】:2016-04-24 14:11:04
【问题描述】:

如何在没有应用布局和不改变以下代码结构的情况下呈现new动作?

class FoobarController < ApplicationController

  def new
    @foobar = Foobar.new
  end

  # ...
end

因此,当有人点击 = link_to new_foobar_path 时,它应该触发一个 JS 事件,该事件将操作呈现为 HTML,无需应用程序布局并通过 Ajax。

【问题讨论】:

    标签: javascript jquery ruby-on-rails ajax


    【解决方案1】:

    如果你有能力稍微改变动作,你可以通过以下方式实现:

    class FoobarController < ApplicationController
    
      def new
        @foobar = Foobar.new
        if request.xhr? # checks whether its an ajax call
          render partial: 'new'
        else
          render # thats it
        end
      end
    
      ...
    end
    

    【讨论】:

    • 这行得通,但它改变了代码结构。我通过覆盖ApplicationController 中的render 方法解决了这个问题。
    • @Marc rails 默认充满了多种形式的抽象。以猴子补丁、覆盖等的形式。现在,您想要覆盖渲染方法的行为,这样任何跟随您的人都会在意识到您已经覆盖默认渲染的行为之前至少 5 分钟被该行为所困扰,这样一个控制器中的一个动作看起来不错?做我的客人:)
    • 是的,我知道这是一种反模式。但它是 Ruby,那又怎样...... ;)
    • 也许您想在答案中添加为什么不建议对渲染方法进行猴子补丁。否则我必须编辑我的问题以适合您的答案。
    猜你喜欢
    • 1970-01-01
    • 2012-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-09
    • 2012-04-09
    • 1970-01-01
    相关资源
    最近更新 更多