Rails 4.1.8 link_to删除,JavaScript未应用

时间:2016-02-05 05:59:42

标签: javascript jquery html ruby-on-rails ruby-on-rails-4

我按照Rails入门指南进行操作。

http://edgeguides.rubyonrails.org/getting_started.html

我在尝试使用link_to'删除'时遇到问题。销毁文章的方法。服务器控制台显示未使用DELETE,而是调用GET方法,因此不遵循路由。 指南第5.13节......

articles_controller.rb

  def destroy
    @article = Article.find(params[:id])
    @article.destroy

    redirect_to articles_path
  end

关于这个主题有许多类似的问题,但我还没有找到解决方案,为什么这不起作用。 (我知道button_to确实有效,但必须有一个理由说明指南指向link_to)

我检查了我的application.js文件并确保包含jquery和jquery-ujs:

//= require jquery
//= require jquery_ujs
//= require turbolinks
//= require_tree

控制台输出:

Started GET "/articles" for 127.0.0.1 at 2016-02-05 15:27:43 +1000
Processing by ArticlesController#index as HTML
  Article Load (1.0ms)  SELECT "articles".* FROM "articles"
  Rendered articles/index.html.erb within layouts/application (4.9ms)
Completed 200 OK in 52ms (Views: 50.0ms | ActiveRecord: 1.0ms)

布局文件application.html.erb

  <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %>
  <%= javascript_include_tag '**defaults**', 'data-turbolinks-track' => true %>
  <%= csrf_meta_tags %>

使用浏览器开发人员工具,似乎正确包含了JS文件。我还检查了不同的浏览器,并确保javascript在浏览器上运行。

以下是浏览器<head>部分:

<head>
  <title>Blog</title>
  <link data-turbolinks-track="true" href="/assets/articles.css?body=1" media="all" rel="stylesheet">
<link data-turbolinks-track="true" href="/assets/welcome.css?body=1" media="all" rel="stylesheet">
<link data-turbolinks-track="true" href="/assets/application.css?body=1" media="all" rel="stylesheet">
  <script data-turbolinks-track="true" src="/javascripts/**defaults**.js">    </script>
  <meta content="authenticity_token" name="csrf-param">
<meta content="TwTtY9tuU/f7W5kWKkxNITD+KjuZ3zcTVD6b+8IkihA=" name="csrf-token">
</head>

我已尝试将application.js文件更改为建议here的以下内容!

<html>
<head>
  <title>Blog</title>
  <%= stylesheet_link_tag    'application', media: 'all', 'data-turbolinks-track' => true %>
  <%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>
  <%= csrf_meta_tags %>
</head>
<body>

<%= yield %>

</body>
</html>

获取以下错误: enter image description here

还有什么我可以尝试让link_to按预期工作吗?我知道rails使用javascript作为link_to DELETE和确认框,但没有显示。

编辑:添加了使用link_to的视图文件。

index.html.erb
      <td><%= link_to 'Show', article_path(article) %></td>
      <td><%= link_to 'Edit', edit_article_path(article) %></td>
      <td><%= link_to 'Destroy', article_path(article), method: :delete,
          data: { confirm: 'Are you sure?' } %></td>
    </tr>

2 个答案:

答案 0 :(得分:1)

你有方法::在你的销毁链接中删除如下?

<%= link_to 'Destroy', article_path(article),
          method: :delete,
          data: { confirm: 'Are you sure?' } %>

你应该使用application.js而不是默认的

  <%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>

我假设你在Windows上的咖啡脚本版本遇到了同样的问题。请查看以下链接以更改和更新咖啡脚本宝石。

Rails ExecJS::ProgramError in Pages#home?

gem'coffee-script-source','1.8.0'

捆绑更新coffee-script-source

答案 1 :(得分:1)

错误似乎是没有为您的系统正确配置ExecJS

  

ExecJS允许您从Ruby运行JavaScript代码。它会自动选择可用于评估JavaScript程序的最佳运行时,然后将结果作为Ruby对象返回给您。

如果您使用的是Windows,则应download & install nodeJS

如果您使用的是Linux / Mac,则应将therubyracer / execjs添加到Gemfile

#Gemfile
gem 'execjs'       
gem 'therubyracer' 

ExecJS and could not find a JavaScript runtime