【发布时间】:2014-12-03 13:23:13
【问题描述】:
我在 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 对象。我不想最终添加一个可怕的 html 与对象 ID 等来创建链接。
我应该这样做吗?我已经阅读了文档和其他一些教程,但没有任何地方真正(根本)描述了在视图中使用返回的 Json 的最佳方式。我应该使用局部吗? .js.erb 文件?魔法?
感谢您的启发!
【问题讨论】:
标签: javascript jquery ruby-on-rails ajax json