我正在使用Ruby on Rails制作一个单页应用程序(这是我有史以来的第一个ruby项目,因此我肯定还缺少很多东西)。
因此,我有一个带有一些链接的侧菜单,该页面的右侧应该容纳一个容器,该容器将填充部分页面的某些内容。
我现在使用的典型菜单链接看起来是这样的:
<%= 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
<div class="right_col" role="main">
<h2>This is the default content of center page</h2>
</div>
这是它的routes.rb路径:
get 'dashboard/mygroups' => 'dashboard#mygroups'
我的仪表板模板的底部还有一个页面的局部页面,名为_mygroups.html.erb和一个名为mygroups.js.erb的javascript文件,称为我的控制器操作
看一下结构截图
该js.erb文件的内容为:
$('.right_col').html("<%= escape_javascript(render(:partial => 'mygroups')) %>");
一切正常,部分内容出现在容器中,单击链接就可以了。
但是仍然有2个问题我无法在google上找到答案
问题部分:
1)它可以与Ajax调用一起使用,但是如果我只是将此http://localhost:3000/dashboard/mygroups放在浏览器的导航行中并按Enter,它将给我这个错误
DashboardController#mygroups中的ActionController :: UnknownFormat
ActionController :: UnknownFormat
提取的来源(第70行左右):
def mygroups
response_do |格式|
format.js结束结束
在这种情况下,如何避免这种情况,而只重定向到索引?
我知道ajax使用POST,但是我尝试使用post而不是get.routes.rb来执行此操作,但它根本不起作用
2)如果我对不同的部分页面有很多操作,该为每个操作创建一个新的js.erb文件怎么办?不能只用一个文件以某种简单的方式完成它吗?
3)是否可以不明确指定此链接上的控制器和动作?
<%= link_to t('my-groups'), :controller => 'dashboard', :action => 'mygroups', :remote => true %>
我的意思是,由于这应该是POST ajax请求,因此为什么需要向用户显示类似http://localhost:3000/dashboard/mygroups的网址?
最佳答案
在控制器中添加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标记中添加网址,例如:
<%= link_to t('my-groups'), '/dashboard/mygroups', :remote => true %>
关于javascript - 在Ruby on Rails中进行远程(ajax)调用的正确方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43511596/