javascript - Rails View 中的 Json 对象

标签 javascript jquery ruby-on-rails ajax json

我在 Rails 应用程序上有一个搜索页面。搜索 Controller 根据模型中的查询获取空间,并将其作为 json 返回。我在 View 中使用 $.getJSON 来获取它们:

搜索 Controller :

respond_to :html, :js

  def index
    @spaces = Space.find_spaces(params)
  end

空间模型

def self.find_spaces(params = {})
  params ||= {}
  spaces = Space.all
  spaces = spaces.near(params[:location], 10) if params[:location].present?
  # spaces = space.where("name LIKE ? ", params[:name]) if params[:name].present?
  spaces = spaces.where("description LIKE %?%" , params[:description]) if params[:description].present?
  spaces
end

脚本(views/search/index.html.erb)

$( document ).ready(function() {
    $( "#search_form" ).submit(function() {
        // clear out current results first
        $('#spaces').empty();
        // fetch all results
    $.getJSON( "/search.json", $('#search_form').serialize())
    .done(function( data ) {
            $.each(data, function(key, space) {
                $('#spaces').append("<h1>" + space.name +  "</h1><p>" + space.description + "</p>");
            });
        });
    }).trigger('submit'); //this is to submit on page load if coming from home page
});

这一切都工作正常,我可以访问 JSON 对象,并使用 jquery 在 View 中显示它,并且所有更新都不会按预期刷新,并根据表单/查询提供正确的结果。

我的问题是关于在 View 中使用 Json 数据。

我这样做对吗?看起来有点傻,因为现在我认为不能使用任何 Rails 帮助器(例如链接帮助器),因为它只是 javascript/json 对象。我不想最终添加一堆可怕的带有对象 ID 等的 html 来创建链接。

我应该这样做吗?有正确/更好的方法吗?我已经阅读了文档和其他一些教程,但没有任何地方真正(根本)描述了在 View 中使用返回的 Json 的最佳方法。我应该使用部分吗? .js.erb 文件?魔法?

感谢您的启发!

最佳答案

实际上,您可以使用 ajax 来获取整个渲染的 HTML,然后将整个结果附加到 #spaces 中,而不是使用 ajax 来获取 JSON 数据。首先在 Controller 中创建一个新操作

搜索 Controller :

def result
  @spaces = Space.find_spaces(params)
end

路线.rb

match "search/result" => "search#result"

然后你的 View views/search/result.html.erb

<% @spaces.each do |space| %>
<h1><%= space.name %></h1><p><%= space.description %></p>
<% end %>

现在你可以使用ajax从rails获取渲染 View 并使用javascript将其完整

$( document ).ready(function() {
    $( "#search_form" ).submit(function() {
        $('#spaces').empty();
        $.get( "/search/result", $('#search_form').serialize())
        .done(function( search_result_html ) {
            $("#spaces").html( search_result_html );
        });
    }).trigger('submit'); //this is to submit on page load if coming from home page
});

这样你就可以在 view/sea​​rch/result.html.erb 上渲染所有内容,并使用你想要的任何 Rails 助手

关于javascript - Rails View 中的 Json 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27272852/

相关文章:

javascript - 基于 AJAX 输入构建 HTML 的正确方法

javascript - 输入框验证

ruby-on-rails - 应该将 gems 与该应用程序 bundle 在一起吗?

ruby-on-rails - RSpec 测试被分页破坏(Kaminari)

ruby-on-rails - 通过地理编码器获取当前位置。 rails

javascript - 将通知推送到 JavaScript?

javascript - 为什么我的数据没有显示在文本框中?

javascript - 在 javascript 中检查内容 css

javascript - 使用 PrettyPhoto 和 jQuery 打开自定义内容

javascript - jQuery 侧边菜单点击切换更改 gyphicon