【问题标题】:application.html.erb where line #6 raised: TypeError: Ruby on railsapplication.html.erb 其中第 6 行引发:TypeError: Ruby on rails
【发布时间】:2015-10-19 19:04:01
【问题描述】:

我正面临以下错误消息:

餐厅#index 中的 ExecJS::ProgramError 显示 C:/rubyProject/vota_prato/app/views/layouts/application.html.erb where >line #6 raise:

TypeError: O objeto não dá suporte para a propriedade ou método Rails.root: C:/rubyProject/vota_prato

应用程序跟踪 |框架跟踪 |全跟踪 app/views/layouts/application.html.erb:6:in >`_app_views_layouts_application_html_erb__971963449_62998908' 请求

我修复了它,删除了这条线:

真 %>

来自我的 app/views/layouts/application.html.erb 文件

在我这样做之后,我遇到了另一个问题 =(。我在一个控制器上创建了一个动作销毁:

class RestaurantesController < ApplicationController
    def destroy
        @restaurante = Restaurante.find(params[:id])
        @restaurante.destroy
        redirect_to(action: "index")
    end

    def index
        @restaurantes = Restaurante.all
    end

    def show
        @restaurante = Restaurante.find(params[:id])
    end
end

还有我的 index.html.rb 文件:

<h1>Listagem de Restaurantes</h1>

<table>
  <tr>
    <th>ID</th>
    <th>Nome</th>
    <th>Endereço</th>
    <th>Especialidade</th>
  </tr>

<% @restaurantes.each do |restaurante| %>
  <tr>
    <td><%= restaurante.id %></td>
    <td><%= restaurante.nome %></td>
    <td><%= restaurante.endereco %></td>
    <td><%= restaurante.especialidade %></td>
    <td><%= link_to 'Mostrar', action: 'show', id: restaurante %></td>
    <td>--</td>
    <td><%= link_to 'Deletar', {action: 'destroy', id: restaurante},{method: "delete"} %></td>
  </tr>
<% end %>
</table>

当点击删除链接时,它执行了与显示操作相同的操作,我不知道为什么

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3


    【解决方案1】:

    要解决 Windows 中的 ExecJS 问题,请将 views/layouts/aplication.html.erb 文件的第 5 行和第 6 行中的参数 application 更改为 default

    文件应如下所示:

    <%= stylesheet_link_tag    'default', media: 'all', 'data-turbolinks-track' => true %>
    <%= javascript_include_tag 'default', 'data-turbolinks-track' => true %>
    

    这对我有用。

    【讨论】:

      【解决方案2】:

      首先,如果我的英语太糟糕了,我很抱歉... 这个错误几个月前发生在我身上。安装 ruby​​、rails gem 或任何其他 gem 都没有问题。

      这些是我的规格:

      • 运行 Windows 10
      • 使用 RubyInstaller 3.2.0,包含的软件包有:
        • Ruby 2.2.4
        • Rails 4.2
        • 捆绑器
        • 吉特
        • Sqlite
        • TinyTDS
        • SQL Server 支持
        • 开发工具包

      安装 RubyInstaller 后,我创建了一个新项目,但我遇到了和你一样的错误:

      ExecJS::ProgramError in home#index Showing C:/ruby_project/app/views/layouts/application.html.erb where line #6 raised:
      TypeError: Object doesn't support this property or method
      

      确定的解决方案是:

      1. 停止任何 Rails Web 服务器。
      2. 关闭一切。
      3. 打开您的网络浏览器并浏览 nodejs 下载包站点,或者您可以从这里下载它: Download Link (Windows)
      4. 在您的操作系统上安装 nodejs。安装 32 位版本,即使您运行的是 64 位版本。
      5. 重新启动计算机,打开所需项目的命令行,然后运行“rails server”。
      6. 完成... 无需更改 app/views/layouts/application.html.erb 上的任何内容。 它会工作...默认情况下让它工作:

      <!DOCTYPE html>
      <html>
      <head>
        <title>Sample</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>

      注意:对于 linux/mac 用户,只需通过 RVM(Ruby 版本管理器)安装 ruby​​ 和 rails。你不会有任何问题,我凭经验告诉你。

      为了在您的 linux/mac 终端上安装 RVM,我将向您推荐以下这些教程。我已经尝试过它们并且它们有效!

      请评论这是否对您有用...

      问候。

      【讨论】:

      • 是的。我正在使用 Rails 5.1.4、Ruby 2.3.3 和 Bundler 1.16.0。我的问题通过安装 nodejs 解决了。谢谢。
      【解决方案3】:

      由于没有足够的信息,无法说明您的 JS 问题。

      至于链接部分,你的删除链接应该是这样的:

      <%= link_to 'Deletar', restaurante_path(restaurante), method: :delete %>
      

      还要确保您的application.js 中包含jquery-ujs(这是理解链接中的method: :delete 部分并发布表单而不是获取页面的原因)

      顺便说一句,不要把两个问题合二为一。让它们分开问题。

      【讨论】:

        【解决方案4】:

        你需要安装nodejs来融合turboliks; )

        点击链接:https://nodejs.org/en/download/

        【讨论】:

        • 您可能想扩展您的答案,说明为什么需要 node 来编译 turbolinks 以获得 jquery_ujs 或 rails_ujs 删除功能:)
        【解决方案5】:

        您是否取消了该行的注释:

        gem 'therubyracer',  platforms: :ruby
        

        来自您的 gemfile?这样做,运行“捆绑安装”并重试。 delete 方法依赖于一些 Javascript。它是 ruby​​racer 或者你可以使用的一些 nodejs 东西,我不记得它叫什么了。

        【讨论】:

          【解决方案6】:

          谢谢,它有效,但我认为它有效,因为我安装了 nodeJS。重新启动计算机后,两种解决方案都有效

          【讨论】:

          • 是的,nodejs 也可以完成这项工作,很高兴它对你有用!
          猜你喜欢
          • 2012-08-29
          • 1970-01-01
          • 2021-12-14
          • 1970-01-01
          • 2015-08-23
          • 2020-03-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多