我正在用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
這個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給用戶的網址是什麼?
'.js.erb'是最麻煩的方法。取而代之的是使用JSON數據並在客戶端腳本中包含函數,而不是作爲響應提供。 – tadman
add format.html也 – puneet18
eg respond_to do | format | format.js format.html end – puneet18