1

在我的 index.html.erb 中,我有一个通过 Ajax(我认为)提交的表单:remote => true

<%= form_tag locations_path, :method => :get, :remote=>true  do %>
  <p>
    <%= text_field_tag :location, params[:location] %>
    <%= submit_tag "Search Near", :name => nil %>
  </p>
<% end %>

在 index 操作中,它被安排为通过 json 返回 @locations

def index
     if params[:location].present?
      @locations = Location.near(params[:location], 5 , :order => :distance)

    else
      @locations = Location.all
    end
     respond_to do |format|
      format.html # new.html.erb
      format.json { render json: @locations }
    end

  end

现在它只是返回(我希望)@locations。如何在 index.html.erb 的这个 div 中获得 @locations 的结果?

<div class="places">  </div>
4

2 回答 2

1

我会建议一种稍微不同的方式:使用 .js 响应。然后它应该看起来像这样:

#def index
#some code...
respond_to do |format|
  format.html 
  format.js
end


#index.js.erb
$('.places').html("<%= escape_javascript(render :partial => "places_list") %>");


#_places_list.html.erb
<%- @locations.each do |location| %>
  <p><%= location.name %> </p>
<%- end %>

The tutorial on this topic: http://net.tutsplus.com/tutorials/javascript-ajax/using-unobtrusive-javascript-and-ajax-with-rails-3/

于 2012-04-27T05:56:31.657 回答
0

ajax:success您可以在 javascript中绑定到表单元素上的事件

请参阅这篇文章以获得详细的解释:Rails 3 Remote Links and Forms by Steve Schwartz

您可能还想替换它:

respond_to do |format|
  format.html # new.html.erb
  format.json { render json: @locations }
end

有了这个

respond_with @locations

并将其添加到控制器的顶部:

respond_to :json
于 2012-04-27T03:03:43.010 回答