簡體   English   中英

AJAX調用在Rails 3中渲染部分

[英]AJAX call to render partial in Rails 3

我有一個用戶的儀表板頁面,其中左側有一個側欄,其中包含項目,博客等鏈接。我希望能夠單擊“項目”鏈接等鏈接,然后在主區域中查看項目視圖加載(視圖將是項目的項目符號列表),而無需刷新頁面。 我試圖用AJAX來實現這一點,但事情並沒有奏效。

這就是我認為應該如何運作的方式。 用戶點擊show.html.erb的側邊欄鏈接

<%= link_to 'Projects', '/dash', remote: true %>

where /dash配置為路由到用戶config/routes.rbconfig/routes.rb文件中顯示如下:

match '/dash' => 'users#show'

然后,在users_controller.rb控制器中調用show動作:

def show
    @user = User.find(params[:id])
    @projects = @user.projects

    respond_to do |format|
      format.html # renders show.html.erb
      format.js   # renders show.js.erb
    end
end

執行show.js.erb地方。 我的show.js.erb文件有這一行:

$('#ajax').html("<%= escape_javascript(render(:partial => 'projects/index')).html_safe %>");

這應該修改我的show.html.erb的#ajax div:

<div id="ajax">
  <%= render :template => 'projects/index' %>
</div>

app/views/projects/index.html.rb接受@projects並給出一個列表,如下所示:

<% @projects.each do |project| %>
  <p><%= project.name %></p>
<% end %>

顯然,我做錯了,因為這不起作用。 我究竟做錯了什么? 我需要在其他地方更改一些代碼嗎? 我在Rails 3.2.13上,所以app/assets/javascripts/application.js下的//=jquery//=jquery_ujs的行應該已經導入了必要的jQuery和AJAX功能。

問題是,在show.js.erb文件中,您嘗試渲染部分文件,但是您傳遞的文件不是部分文件。 部分文件以下划線_開頭。

所以,為了避免重復代碼,這就是我要做的:

# app/views/projects/show.js.erb
$('#ajax').html("<%= escape_javascript(render :partial => 'index', :locals => { :projects => @projects } ) %>");

# app/views/projects/index.html.erb
<%= render :partial => 'index', :locals => { :projects => @projects } %>

# app/views/projects/**_**index.html.erb
# Include here the code that you previously had in index.html.erb
# Don't forget to change @projects to projects
<% projects.each do |project| %>
  <p><%= project.name %></p>
<% end %>

此外,您不應該在路由中使用match ,因為您幾乎不需要GET和POST方法都可以訪問您的路由。 所以盡量使用get而不是match

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM