[英]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.