Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在视图中使用另一个模型导致测试错误_Ruby On Rails_Ruby_Testing_View - Fatal编程技术网

Ruby on rails 在视图中使用另一个模型导致测试错误

Ruby on rails 在视图中使用另一个模型导致测试错误,ruby-on-rails,ruby,testing,view,Ruby On Rails,Ruby,Testing,View,app/views/products/index.html.erb: <p id="notice"><%= notice %></p> <%= render 'search' %> <h1>Listing Products</h1> <br> <%= will_paginate @products %> <% if @products.present? %> <table&

app/views/products/index.html.erb:

<p id="notice"><%= notice %></p>

<%= render 'search' %>

<h1>Listing Products</h1>

<br>

<%= will_paginate @products %>
<% if @products.present? %>

<table>
    <thead>
    <tr>
        <th>Title</th>
        <th>Description</th>
        <th>Image</th>
        <th>Price</th>
        <th>Category</th>
        <th colspan="3"></th>
    </tr>
    </thead>

    <tbody>
    <% @products.each do |product| %>
        <tr>
        <td><%= product.title %></td>
        <td><%= product.description %></td>
        <td><%= image_tag product.photo.url(:small) %></td>
        <td><%= number_to_currency(product.price, :unit => '$') %></td>
        <td><%= link_to Category.find(product.category_id).name, category_path(product.category_id) %></td>
        <td><%= link_to 'Show', product %></td>
        <% if current_user.try(:admin?) %>
            <td><%= link_to 'Edit', edit_product_path(product) %></td>
            <td><%= link_to 'Destroy', product, method: :delete, data: { confirm: 'Are you sure?' } %></td>
        <% end %>
        <td><a href="/cart/<%= product.id %>">Add To Cart</a></td>
        </tr>
    <% end %>
    </tbody>
</table>

<% else %>
    <% if params[:search].present? %>
        <p>There are no products containing the term(s) <b><%= params[:search] %></b>.</p>
    <% else %>
        <p>There are no any products found in database.</p>
    <% end %>
<% end %>

<br>
<% if current_user.try(:admin?) %>
    <%= link_to 'New Product', new_product_path %>
<% end %>
<p id="notice"><%= notice %></p>

<p>
    <strong>Title:</strong>
    <%= @product.title %>
</p>

<p>
    <strong>Description:</strong>
    <%= @product.description %>
</p>

<p>
    <strong>Image:</strong>
    <%= image_tag @product.photo.url(:original) %>
</p>

<p>
    <strong>Price:</strong>
    <%= @product.price %>
</p>

<p>
    <strong>Category:</strong>
    <%= @product.category.name %>
</p>

<%= social_share_button_tag(@product.title, :url => request.original_url, :image => root_url + @product.photo.url(:small), desc: @product.description, via: "SCOR") %>

<% if current_user.try(:admin?) %>
    <%= link_to 'Edit', edit_product_path(@product) %> |
<% end %>
<%= link_to 'Back', products_path %>
导致这些错误的原因:

  1) Error:
ProductsControllerTest#test_should_get_index:
ActionView::Template::Error: Couldn't find Category with 'id'=1
    app/views/products/index.html.erb:31:in `block in _app_views_products_index_html_erb___969781135508440478_70267650596940'
    app/views/products/index.html.erb:25:in `_app_views_products_index_html_erb___969781135508440478_70267650596940'
    test/controllers/products_controller_test.rb:15:in `block in <class:ProductsControllerTest>'


  2) Error:
ProductsControllerTest#test_should_show_product:
ActionView::Template::Error: undefined method `name' for nil:NilClass
    app/views/products/show.html.erb:25:in `_app_views_products_show_html_erb___1500506684449289207_70267650787820'
    test/controllers/products_controller_test.rb:36:in `block in <class:ProductsControllerTest>'



如果要查看整个项目:

在产品装置中,定义一个类别为1的产品

运行测试时,它找不到id为1的类别

测试/夹具/产品.yml
中:

替换:

category_id: 1
link_to Category.find(product.category_id).name, category_path(product.category_id)

为什么是“一”?因为在
test/fixtures/categories.yml
中,您定义了一个标记为one的类别:

one:
  name: New T-Shirts
  desc: Example category description
您不应在装置中引用id,而应使用关联

关于这个主题的一篇好文章:

此外,您还应替换:

link_to Category.find(product.category_id).name, category_path(product.category_id)


我很高兴能帮助你
category: one
one:
  name: New T-Shirts
  desc: Example category description
link_to Category.find(product.category_id).name, category_path(product.category_id)
link_to product.category.name, category_path(product.category)