Rails - 如何在不使用“:remote => true”的情况下将动作呈现为JS?

时间:2015-01-28 16:42:06

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

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

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

和控制器中的操作:

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

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

到目前为止一切顺利。

但是现在当我尝试输入网址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?

谢谢。

2 个答案:

答案 0 :(得分:0)

使用此链接(基本上只需将格式.js添加到结尾):

web.com/posts/6.js

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

答案 1 :(得分:0)

替换

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

通过

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

警告

@ user984621是对的:获取与js的链接非常奇怪。