Ruby on rails getScript jQuery路径不工作/Ruby on Rails
我有一个jQuery函数,双击列表项后调用它 app/assets/javascripts/tile/tile.jsRuby on rails getScript jQuery路径不工作/Ruby on Rails,ruby-on-rails,ruby,ruby-on-rails-3,jquery,getscript,Ruby On Rails,Ruby,Ruby On Rails 3,Jquery,Getscript,我有一个jQuery函数,双击列表项后调用它 app/assets/javascripts/tile/tile.js $('#list > li').dblclick(function(){ // styling $(this).toggleClass('liked'); // pass ID to controller var movie_id = $(this).attr("data-id"); $.getScript("/likes.js"); }); 除了对
$('#list > li').dblclick(function(){
// styling
$(this).toggleClass('liked');
// pass ID to controller
var movie_id = $(this).attr("data-id");
$.getScript("/likes.js");
});
除了对所述项目应用一些新格式之外,我的主要目标是从我的控制器中创建一个数据库条目。在这种情况下,使用这条简单的行调用来自其注释控制器的索引
操作
$.getScript("/comments.js");
此外,还可以从index.js.erb
文件调用一些JavaScript
我理解Railscasts示例代码的第一个问题是他们如何定义操作。如果我想从我的likes\u控制器调用动作createLike
,我将如何调用它
其次,到目前为止,我的尝试都失败了,因为JavaScript文件没有加载,操作也没有被调用
不知怎的,我感觉我把路弄乱了。我应该在哪里找到应该使用getScript
函数调用的JavaScript文件
文件夹
app/assets/javascripts/likes/index.js.erb
console.log("Test");
class LikesController < ApplicationController
protect_from_forgery
def index
Like.create(:user_id => current_user.id, :item_id => params[:id])
end
end
app/controllers/likes\u controller.rb
console.log("Test");
class LikesController < ApplicationController
protect_from_forgery
def index
Like.create(:user_id => current_user.id, :item_id => params[:id])
end
end
class-LikesControllercurrent\u user.id,:item\u id=>params[:id])
结束
结束
您可以在控制器中定义如下操作:
class LikesController < ApplicationController
# another code
def createLike
# your action code
end
# another code
end
tile.js
文件必须位于/PATH\u TO\u APP/public/javascripts/tile
目录中
如果你想用jQuery获取javascript文件,你必须把它们放在public/javascripts
目录下,并调用$.getScript('/javascripts/likes.js')代码>-这里有一个例子
p.S.我建议查看我相信通过将index.js.erb从
app/assets/javascripts/likes/index.js.erb
console.log("Test");
class LikesController < ApplicationController
protect_from_forgery
def index
Like.create(:user_id => current_user.id, :item_id => params[:id])
end
end
到
应用程序/视图/喜欢
$('#list > li').dblclick(function(){
// styling
$(this).toggleClass('liked');
// pass ID to controller
var movie_id = $(this).attr("data-id");
$.getScript("/likes.js");
});
这就是Rails查找要呈现的模板的地方(您的脚本不应该由资产管道提供)。Rails通过惯例解决了这一问题——您的应用程序会自动路由/喜欢索引操作
如果您想要信息更丰富的路由,请使用生成新路由,并将其与likes控制器中的create_likes操作相匹配。那么,
$.getScript(“/create\u likes.js”)
会知道去哪里看你想要的行为与特定的铁路乘客所要解决的不同。它特别关注于在创建新注释时检索它们,而无需刷新页面。这就是为什么您在遵循本指南时遇到问题的原因
首先,您需要确保在config/routes.rb中有一个resources:likes
。从您的代码摘录来看,您似乎将like与电影相关联,因此请确保将路由嵌套在资源:电影调用中。最后,您的路线应该如下所示:
resources :movies do
resources :likes
end
对于控制器部件,您需要向控制器添加“创建”操作。假设你的电影模型有很多:likes
这是你的动作应该是什么样子的一个简单版本:
def create
movie = Movie.find(params[:movie_id])
movie.likes.create(user_id: current_user.id)
end
您还需要更改javascript代码以发出post而不是get请求。这是因为http方法是Rails区分创建和索引请求的方式,因为它们都使用相同的url路径(例如/comments.js)。您还需要让url反映它是电影中的嵌套资源。以下是修改后的JS代码版本:
$('#list > li').dblclick(function() {
// Cached jquery this selector.
$this = $(this)
// pass ID to controller
var movie_id = $this.data('id');
$.post('/movies/' + movie_id + '/likes.js', function() {
$this.toggleClass('liked');
});
});
至于你的.js.erb文件,正如其他人所说,它应该放在你的app/views
文件夹中。然而,由于您的常规JS处理逻辑,您不需要拥有所有这些
这只是一种策略,但还有很多其他方法可以处理JS与Rails的交互。如果您想要一个使用js.erb(本例中为js.coffee)视图文件的示例,您可以看看这个。在这种情况下,所有处理click事件的都是指向remote:true选项的链接,该选项将jquery-ujs适配器委托给它
希望有帮助 这可能与您的答案不太接近,但我使用$.getscript()
加载页面呈现后所需的js/css
文件,这反过来提高了性能并减少了页面加载时间。这是我在erb
文件中使用的代码。my shop\u for\u free\u module.js位于app/public/javascripts
<script type="text/javascript">
jQuery(document).ready(function($){
//this gives your protocol-http
var protocol = this.location.protocol;
//this gives your domain name-myshopptinsite.com
var host = this.location.host;
var initial_url = protocol + "//" + host;
$.getScript(initial_url + "/javascripts/eshop_js/shop_for_free_module.js");
});
</script>
jQuery(文档).ready(函数($){
//这将为您的协议提供http
var协议=this.location.protocol;
//这将提供您的域名-myshopptinsite.com
var host=this.location.host;
var initial_url=协议+“/”+主机;
$.getScript(初始url+“/javascripts/eshop_js/shop_for_free_module.js”);
});
…希望有帮助。试试这个
问题:我理解Railscasts示例代码的第一个问题是他们如何定义操作。如果我想从我的likes\u控制器调用createLike操作,我将如何调用它
答复:
class LikesController < ApplicationController
def create_like
Like.create(:user_id => current_user.id, :item_id => params[:id])
end
end
问题:其次,我到目前为止的尝试都失败了,因为JavaScript文件没有加载,动作也没有被调用
Anaswer:move app/assets/javascripts/likes/index.js.erb
编码到
app/views/likes/create_like.js.erb
您需要将项目\u id传递给
getScript方法
$(document).ready(function() {
$('#list > li').dblclick(function(){
// styling
$(this).toggleClass('liked');
// pass ID to controller
var item_id = $(this).attr("data-id");
$.getScript("/create_like.js?item_id=" + item_id);
});
});
我不知道你在问什么…你想使用AJAX调用从服务器发送/接收信息吗?我要到周四才能尝试你所有的好建议。。。已经谢谢你的帮助了@Champ更新了我的答案,修复了调用getScript方法时的代码错误,而不是likes.js。必须调用create\u like.js。感谢allot,这对我很有效!:)更改JS文件的路径后,我必须将资源:likes
添加到我的