在ajax获取请求后,rails渲染部分

时间:2013-06-02 16:10:17

标签: ruby-on-rails ajax render partial

我在我的Rails 3应用程序中使用Jvectormap。 当我点击它时,我想隐藏地图并使用有关所选国家/地区的信息可视化部分。

我处理地图点击,然后向服务器发送GET请求。

users.js.coffee.erb

$ ->
  $("#world-map").vectorMap
    onRegionClick: (event, code) ->
      $('#world-map').hide(1000)
      $.get('/users/statistics', {code: code});
      $('#statistics').show(1000)

users_controller.rb

def statistics
 @country = Country.find_by_two_letter_code((params[:code]).downcase)  
 render :nothing => true

这是回复

  

在2013-06-02 17:54:49 +0200

开始获取127.0.0.1的“/ users / statistics?code = ET”      

按UsersController#statistics处理 /

     

参数:{“code”=>“ET”}

     

国家负荷(0.2ms)选择“国家”。* FROM“国家”WHERE

     

“countries”。“two_letter_code”='et'LIMIT 1

     

渲染文字模板(0.0ms)

     

2ms完成200 OK(浏览次数:0.6ms | ActiveRecord:0.2ms)

和视图

show.html.erb

 <p> <div id="world-map" style="width: 620px; height: 300px"></div>
      <div id="statistics" style="width: 620px; height: 300px; display:none;">
       <section>
        <%= render partial:'statistics', :locals => {:country => @country}  %>
      </section>
      </div>
    </p>

_statistics.html.erb

<%= link_to '<i class="icon-remove"></i>'.html_safe%>
<%=country%>
<%=@country%>

现在,一切正常,但部分不会显示国家/地区价值。 如果我必须在ajax get请求之后重新渲染部分,以及如何重新渲染部分,我不会理解。

我试图以另一种方式更改控制器,但行为是一样的。

def statistics
 @country = Country.find_by_two_letter_code((params[:code]).downcase)  
 render 'users/_statistics'
end

2 个答案:

答案 0 :(得分:0)

我认为既然您不需要页面刷新,只需要显示国家/地区的详细信息,就可以使用ajax。

show.html

<p> <div id="world-map" style="width: 620px; height: 300px"></div>
  <div id="statistics" style="width: 620px; height: 300px; display:none;">
   <section>
    <div id="place_partial_here"></div>
  </section>
  </div>
</p>
控制器中的

def statistics
  @country = Country.find_by_two_letter_code((params[:code]).downcase)  
  respond_to do |format|
    format.js
  end
end

in statistics.js.haml #i我很熟悉haml。

$('#place_partial_here').replaceWith("#{escape_javascript(render partial: 'country_data', locals: {country: @country})}");
_country.html.haml

中的

#place_partial_here #id is denoted in haml using hash
  = country.name #display country name
  = country.code #display code

部分必须在id'place_partial_here'内部有视图代码,以便它可以用于进一步的ajax调用

答案 1 :(得分:-2)

你试过这个吗?

render:partial =&gt; “statistics”,:collection =&gt; @country