【问题标题】:Use Rails logic with JSON data使用带有 JSON 数据的 Rails 逻辑
【发布时间】:2016-07-14 06:51:54
【问题描述】:

这似乎是一个非常愚蠢的问题,但我目前没有想法并感谢建议。

我创建了一个测验界面,当点击 NEXT 按钮时应该会更改问题。下一个问题通过 AJAX 调用加载为 JSON。现在问题包含 HTML,我需要使用 Rails sanitize helper 来过滤标签。

我不确定如何对通过 AJAX 调用获取的 JSON 数据 数据使用 sanitize 方法。

请指导我。

编辑: 压力不在于 JSON 数据。这是一个诚实的错误。问题是无法对 AJAX 调用返回的数据使用 Rails 逻辑。

【问题讨论】:

  • 我认为你需要 $("#div").html(data);
  • 我需要使用这个:apidock.com/rails/ActionView/Helpers/SanitizeHelper/sanitize 辅助方法与返回的 JSON 数据。
  • 所以你得到了 json 数据作为响应,你需要在创建元素和附加到你的 dom 之前对其进行清理?
  • 是的,没错。
  • 你是用jbuilder把json输出到前端吗?

标签: ruby-on-rails json ajax


【解决方案1】:

经过一些研究并在this answer 的帮助下,我能够实现我想要的。

我所要做的就是为测验问题容器创建一个部分模板(例如 _question.html.erb),其形式如下:

_question.html.erb

<%= form_tag('/question', :remote => true, :id => 'quiz') do -%>
  ... some code here ...
 <%= submit_tag 'Submit' %>
<% end -%>

在 routes.rb 中创建路由/question

  match 'question', :to => 'quiz#question', via: [:post]

并在 QuizController.rb 中处理响应:

class QuizController < ApplicationController
  def question
    ... some logic here ...

    @ques = ...
    @options = ...

    respond_to do |format|
      format.html
      format.js
    end
  end
end

现在,创建一个 question.js.erb 以使用数据呈现模板:

$('#quiz-container').html("<%= escape_javascript(render partial: 'question',
 :locals => { ques: @ques, options: @options }) %>");

表单中的:remote =&gt; true 选项在这里起到了作用。它通过 ajax 提交表单。现在,我可以在通过 AJAX 调用获取数据的部分模板中使用 Rails 逻辑。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-06
    相关资源
    最近更新 更多