application.html.erb引发第6行:TypeError:Ruby on rails

时间:2015-10-19 19:04:01

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

我遇到以下错误消息:

  

在Restaurantes#index中的ExecJS :: ProgramError   显示C:/rubyProject/vota_prato/app/views/layouts/application.html.erb其中>第6行引发:

     

TypeError:Oobjetonãadásuportepara a propriedadeoumétodo   Rails.root:C:/ ruby​​Project / vota_prato

     

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

我修理了删除行:

   true%>

来自我的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>

点击Deletar链接时,它执行与Show动作相同的动作,我不知道为什么

6 个答案:

答案 0 :(得分:7)

要解决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 %>

这对我有用。

答案 1 :(得分:3)

首先,如果情况太糟糕,我很抱歉。 几个月前我发生了这个错误。没有安装ruby,rails gem或任何其他宝石的问题。

这些是我的规格:

  • 运行Windows 10
  • 使用RubyInstaller 3.2.0,包括的包是:
    • Ruby 2.2.4
    • Rails 4.2
    • 捆扎机
    • GIT中
    • SQLite的
    • TinyTDS
    • SQL Server支持
    • 的devkit

在打开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。即使您在64位上运行,也要安装32位版本。
  5. 重新启动计算机,打开所需项目的命令行,然后运行“rails server&#39;。
  6. 完成...不需要在app / views / layouts / application.html.erb上更改任何内容。 它会工作 ...默认情况下让它:
  7. &#13;
    &#13;
    <!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>
    &#13;
    &#13;
    &#13;

    注意:对于linux / mac用户,只需通过RVM(Ruby Version Manager)安装ruby和rails。你没有遇到任何问题,我是根据经验告诉你的。

    要在linux / mac终端上安装RVM,我将向您推荐以下教程。我试过了,他们工作了!

    如果这对你有用,请评论......

    问候。

答案 2 :(得分:1)

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

至于链接部分,您的删除链接应如下所示:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup viewGroup, Bundle savedInstanceState) {
    mView = inflater.inflate(R.layout.fragment_sourceitem_list, viewGroup, false);
    // ...

    return mView;
}

另外,请确保<%= link_to 'Deletar', restaurante_path(restaurante), method: :delete %> 中包含jquery-ujs(这是您理解链接中的application.js部分并发布表单而不是GET一页的内容)

BTW,不要在一个问题中提出两个问题。分别提出问题。

答案 3 :(得分:1)

您需要安装nodejs来融合涡轮机; )

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

答案 4 :(得分:0)

您是否取消注释该行:

if(!empty($images)){
   //code
}
你的gemfile中的

?这样做,运行“捆绑安装”,然后再试一次。 delete方法依赖于一些Javascript。这是rubyracer或者你可以使用的一些nodejs,我无法重新调用它的名称。

答案 5 :(得分:0)

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