【问题标题】:Rails - how to render an action as JS without using ":remote => true"?Rails - 如何在不使用“:remote => true”的情况下将动作呈现为JS?
【发布时间】:2015-01-28 16:42:06
【问题描述】:

在视图中,我有一个称为 AJAX 的链接:

= link_to "Show post", post, :remote => true

和控制器中的操作:

  def show
    respond_to do |format|
      format.js
    end
  end

当我单击此链接时,请求被称为 AJAX,并显示一个包含相应内容的弹出窗口。此外,所需的地址会添加到 URL(例如 web.com/posts/6)。

到目前为止一切顺利。

但现在当我尝试输入 URL web.com/posts/6 时,我只收到一条错误消息:

Processing by PostsController#show as HTML
  Parameters: {"id"=>"6"}
  Post Load (0.6ms)  SELECT  `posts`.* FROM `posts`  WHERE `posts`.`id` = 6 LIMIT 1
Completed 406 Not Acceptable in 535ms

ActionController::UnknownFormat (ActionController::UnknownFormat):
  app/controllers/posts_controller.rb:14:in `show'

我试图实现这一点,当我将 URL web.com/posts/6 放入浏览器时,页面将呈现与单击带有 :remote => true 选项的链接相同的方式。

如何做到这一点?如何强制控制器中的动作呈现为 JS?

谢谢。

【问题讨论】:

    标签: javascript jquery ruby-on-rails ruby ajax


    【解决方案1】:

    使用这个链接(基本上就是在最后加上.js这个格式):

    web.com/posts/6.js
    

    这也适用于您想要的任何其他格式(例如jsonxml)。只需确保在控制器操作中考虑这些格式即可。

    【讨论】:

    • 嗯,老实说,这不是一个非常友好的方法,最后与.js 共享链接
    • 我同意它看起来不漂亮,但我认为它是最友好的。据我所知,这是唯一的。也许还有另一种方法可以在控制器中进行调整,但我不确定。
    • 感谢 Ryan 的输入,我一直在寻找,如果我发现有用的东西会发布。
    【解决方案2】:

    替换

    = link_to "Show post", post, :remote => true
    

    = link_to "Show post", post, :remote => true, :format => 'js'
    

    警告

    @user984621 是对的:用js获取链接很奇怪。

    【讨论】:

    • 奇怪的是,但没有错。这个答案并没有真正改变任何东西,因为 JavaScript 会自动将 js 的格式添加到任何带有 remote: true 的东西上。我认为他想要一种方法来允许直接链接(来自浏览器)具有js 的格式,这是我知道的唯一方法。
    • @ForgetTheNorm - 当我 [手动] 输入 URL web.com/posts/6 时,我试图弄清楚如何将动作呈现为 JS。如果您将该 URL 放入浏览器,它将被呈现为 HTML。但我试图强制控制器将此动作呈现为 JS。
    • 好吧,我想这也行。就看你觉得哪个好看了。
    猜你喜欢
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 2011-06-01
    • 1970-01-01
    • 2011-04-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多