Ruby on rails getScript jQuery路径不工作/Ruby on Rails

Ruby 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"); }); 除了对

我有一个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");
});
除了对所述项目应用一些新格式之外,我的主要目标是从我的
控制器中创建一个数据库条目。在这种情况下,使用这条简单的行调用来自其
注释
控制器的
索引
操作

$.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
添加到我的