2017-04-20 71 views
0

我正在用Ruby on Rails製作單頁應用程序(這是我的第一個ruby項目,所以我肯定缺少很多東西)。 所以我有一個鏈接的側面菜單和頁面的右側部分應該容納一個容器,這意味着要填充部分頁面的內容。 典型的菜單鏈接我現在看起來是這樣的:在Ruby on Rails中執行遠程(ajax)調用的正確方法

<%= link_to t('my-groups'), :controller => 'dashboard', :action => 'mygroups', :remote => true %> 

我有一個儀表盤控制器,這裏是它的簡化版本

class DashboardController < ApplicationController 
    def mygroups 
    respond_to do |format| 
     format.js 
    end 
    end 

我有它

容器DIV的儀表板模板 ​​

下面是它的routes.rb中路徑:

get 'dashboard/mygroups' => 'dashboard#mygroups' 

我也有一個部分頁面alogside我的儀表板模板,這就是所謂_mygroups.html.erb和被稱爲我的控制器動作 看結構的屏幕截圖的JavaScript文件mygroups.js.erb enter image description here

這個js.erb文件的內容是:

$('.right_col').html("<%= escape_javascript(render(:partial => 'mygroups')) %>"); 

的所有作品,以及部分內容出現在鏈接點擊就好了容器內。 但是仍然有2個問題我不能谷歌

該問題的部分答案:

1)它與Ajax調用,但如果我只是把這個http://localhost:3000/dashboard/mygroups到我的瀏覽器的導航線路和擊中輸入,它會給我這個錯誤

的ActionController :: UnknownFormat在DashboardController#mygroups 的ActionController :: UnknownFormat

Extracted source(around#70):

def mygroups respond_to do | format | format.js end end

我該如何避免這種情況,只是在這種情況下重定向到索引? 據我所知,ajax使用POST,但我試圖使用後,而不是在此行動中獲取routes.rb,它根本沒有工作

2)如果我有很多行動對於不同的部分頁面,我必須爲每個操作創建一個新的js.erb文件嗎?難道只用一個文件就可以以一種簡單的方式完成它?

3)是否可以不明確指定控制器和此鏈接上的操作?

<%= link_to t('my-groups'), :controller => 'dashboard', :action => 'mygroups', :remote => true %> 

我的意思是,因爲它應該是一個POST Ajax請求,爲什麼我需要像這樣顯示http://localhost:3000/dashboard/mygroups給用戶的網址是什麼?

+0

'.js.erb'是最麻煩的方法。取而代之的是使用JSON數據並在客戶端腳本中包含函數,而不是作爲響應提供。 – tadman

+0

add format.html也 – puneet18

+0

eg respond_to do | format | format.js format.html end – puneet18

回答

2

在控制器像添加format.html:

class DashboardController < ApplicationController 
    def mygroups 
    if request.xhr? 
     respond_to do |format| 
     format.js 
     end 
    else 
     redirect_to root_url 
    end 
    end 

您可以在標籤的link_to URL中添加類似:

<%= link_to t('my-groups'), '/dashboard/mygroups', :remote => true %> 
+0

format.html有哪些變化?我沒有注意到任何變化。你能解釋一下嗎?至於'/儀表板/ mygroups',它沒有任何區別。它仍然會創建一個鏈接,所以它不會回答我的問題 – Konstantin

+0

open url http:// localhost:3000/dashboard/mygroups,現在顯示html頁面 – puneet18

+0

DashboardController#mygroups缺少此請求格式和變體的模板。 request.formats:我不希望它打開頁面。我需要這個請求被重定向到「/」,如果它不是用ajax – Konstantin

0

解答你問題

  1. 當你點擊網址在瀏覽器中,它發送香草HTTP獲取請求(非Ajax),您的控制器操作未配置爲處理它。您需要添加format.html和名爲groups.html.erb的模板,通常您會列出所有組,我想。

respond_to do |format| format.html format.js end

  • 理想情況下,你必須創建單獨的文件每個動作,但如果你可以把常用的東西了不同的動作,那麼你可以將常用的模板代碼一個部分並將其呈現在具有特殊功能的獨立模板中或直接從控制器操作中呈現。

  • 是的。 rails的方式是使用路由助手。運行rake routes列出您應用中的所有可用路由並查找相關幫助程序。

  • 我強烈建議閱讀導軌指南,瞭解如何工作。

    +0

    我一直在閱讀文檔。但是我無法一次全部閱讀和理解,如果文檔中有答案,我很抱歉,我找不到它。 – Konstantin