在 Rails 控制器中,即使使用 json 响应也设置通知

Posted

技术标签:

【中文标题】在 Rails 控制器中,即使使用 json 响应也设置通知【英文标题】:In a rails controller, set a notice even when responding with json 【发布时间】:2014-09-03 21:48:30 【问题描述】:

我有一个 ajax 调用会触发我的创建操作。

def create
  @post = Post.create(post_params)
  respond_to do |format|
    format.js  render json: status: "success", location: post_path(@post), notice: "Post was successfully created!" 
    format.html  redirect_to @post, notice: "Post was successfully created!" 
  end
end

当我在没有 ajax 的情况下使用 post#create 时,我可以轻松地将 notice 设置为显示在下一页上。但是,当我使用 ajax 时,我不确定如何设置通知。我该怎么做?

【问题讨论】:

Emily 你用了什么ajax? ruby on rails ajax?或不 ?你能发布你的ajax代码吗? 是的,它是 Ruby on Rails ajax。该创建操作被远程表单(使用 UJS)击中。 【参考方案1】:

不返回 json。呈现完整的 javascript 响应。 Jquery 将自动评估来自您服务器的这个 js。在这个 js 中,您通常用来自控制器的数据替换页面元素的一些 inner_html。并且你可以添加一些 js dom 操作来显示通知。

Unobtrusive Javascript

Working with Ajax 4 Server-Side Concerns

这种技术实现起来比在客户端解析 json 和添加逻辑要快得多。它允许您重用现有的 html 部分,这些部分只是呈现到作为 inner_html 的地方的 js 响应中。

如果您真的想坚持使用 json,则必须使用有关通知的一些附加信息来修改您的 json 响应(因此仅呈现活动记录集合 :to_json 是不够的)

【讨论】:

以上是关于在 Rails 控制器中,即使使用 json 响应也设置通知的主要内容,如果未能解决你的问题,请参考以下文章

如何使用Rails在HTML和JSON中进行响应?

Rails 4 - 只响应 JSON 而不是 HTML

Ruby on Rails,json vs js ajax 响应

在 Rails 中,如何使用视图呈现 JSON?

rails :: 如何评估 js 响应

RSpec在请求后发送原始JSON参数