Javascript Rails视图中的Json对象

Javascript Rails视图中的Json对象,javascript,jquery,ruby-on-rails,ajax,json,Javascript,Jquery,Ruby On Rails,Ajax,Json,我在rails应用程序上有一个搜索页面。搜索控制器根据模型中的查询获取空间,并将其作为json返回。我在视图中使用$.getJSON获取它们: 搜索控制器: respond_to :html, :js def index @spaces = Space.find_spaces(params) end def result @spaces = Space.find_spaces(params) end 空间模型 def self.find_spaces(params =

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

搜索控制器:

respond_to :html, :js

  def index
    @spaces = Space.find_spaces(params)
  end
def result
  @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)

$(文档).ready(函数(){
$(“#搜索表格”)。提交(函数(){
//首先清除当前结果
$(“#空格”).empty();
//获取所有结果
$.getJSON(“/search.json”,$(“#search_form”).serialize()
.完成(功能(数据){
$。每个(数据、功能(键、空格){
$('#spaces')。追加(“+space.name+”“+space.description+”

”); }); }); }).trigger('submit');//如果来自主页,则在页面加载时提交 });
这一切都很好,我可以访问JSON对象,并使用jquery将其显示在视图中,它会按照预期进行更新,而无需刷新,并根据表单/查询得到正确的结果

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

我这样做对吗?看起来有点傻,因为现在我不能在我的视图中使用任何Rails帮助程序(例如链接帮助程序),因为它只是javascript/json对象。我不想最后用对象ID等附加一堆糟糕的html来创建链接

有没有合适/更好的方法可以让我这样做?我已经阅读了这些文档和一些其他教程,但没有任何地方真正(完全)描述在视图中使用返回的Json的最佳方式。我应该使用分部词吗。js.erb文件?魔法


谢谢你的启发

实际上,您可以使用ajax获取整个呈现的HTML,而不是使用ajax获取JSON数据,只需将整个结果附加到#空格中即可。首先在控制器中创建一个新操作

搜索控制器:

respond_to :html, :js

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

match "search/result" => "search#result"
然后您的视图查看/search/result.html.erb

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

通过这种方式,您可以在view/search/result.html.erb中呈现所有内容,并使用您想要的rails帮助程序

谢谢您的帮助,解释得很好。在文档中,没有任何地方真正像这样详细描述流程。