繁体   English   中英

Rails视图中的Json对象

[英]Json object in Rails view

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

搜索控制器:

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在视图中显示它,并且所有更新均按预期进行,而不会刷新,并基于表单/查询获得正确的结果。

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

我这样做对吗? 似乎有点傻,因为现在我不能在视图中使用任何Rails助手(例如链接助手),因为它只是javascript / json对象。 我不想最终以对象ID等形式添加html来创建链接。

我应该有适当/更好的方法吗? 我已经阅读了文档和其他一些教程,但没有一个地方真正(根本)没有描述在视图中使用返回的Json的最佳方法。 我应该使用局部变量吗? .js.erb文件? 魔法?

多谢赐教!

代替使用ajax获取JSON数据,您实际上可以使用ajax获取整个呈现的HTML,然后将整个结果附加到#spaces中。 首先在您的控制器中创建一个新动作

搜索控制器:

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

route.rb

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

然后,您的视图views / search / result.html.erb

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

现在您可以使用ajax从rails获取渲染的视图,并使用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 / search / result.html.erb上渲染所有内容,并使用所需的任何Rails帮助器

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM