产品#show 中的 ArgumentError , 'nil' 不是与 ActiveModel 兼容的对象。它必须实现:to_partial_path



我在做一个杂货店网站。现在,我想将outlet产品的详细信息显示到产品页面,我已经创建了一个名为outlet产品窗体.html.erb的部分文件,放在产品显示页面上。但它向我显示了错误,这是我的代码。

产品控制器

class ProductsController < ApplicationController
def category
@category = Category.find(params[:id])
end
def index
@products = Product.all
end
def show
@product = Product.find(params[:id])
@outlet_product = OutletProduct.find(params[:id])
end
def new
@product = Product.new
@category = Category.all
end
def create
@product = Product.new(product_params)
@category_id = Category.all
if @product.save
flash[:success] = "Succesful create!"
redirect_to @product
else
render 'new'
end
end
private
def product_params
params.require(:product).permit(:name, :quantity, :price,
:category_id, :cost)
end
end

show.html.erb

<% provide(:title, @product.name)%>
<%= render @product %>
<%= render @outletproductform %>
<div class="row">
<aside class="col-md-4">
<section class="stats">
<%= render 'shared/stats' %>
</section>
<div>
<%= link_to "Add to Outlet", new_outlet_product_path %>
<%= link_to "Edit", edit_product_path %>
<%= link_to "Back to products", products_path %>
</div>
</aside>
</div>

_outlet productform.html.erb

<div>
<table class="styled-table">
<thead>
<tr>
<th>Outlet</th>
<th>Quantity</th>
<th>Selling Price</th>
<th>Last Cost</th>
</tr>
</thead>
<tbody>
<tr>
<td><%= outlet_product.outlet.name %></td>
<td><%= outlet_product.quantity %></td>
<td><%= outlet_product.selling_price %></td>
<td><%= outlet_product.last_cost %></td>
</tr>
</tbody>
</div>

架构中的OutletProduct迁移表

create_table "outlet_products", force: :cascade do |t|
t.integer "outlet_id"
t.integer "product_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.decimal "selling_price"
t.decimal "last_cost"
t.decimal "quantity"

结束

控制台中显示错误

错误显示在网站

如注释中所述,您正在将@outletproductform传递给render方法,但由于尚未定义它,因此它为零,因此出现错误。

这适用于前一行,因为您有一个@product的有效对象,并且render方法正在查找相应的视图文件。(例如,如果您传递产品列表,它将查找index.html.erb视图,依此类推(

由于您已经在正确的位置有了正确的视图文件,views/products/_outletproductform,您只需要将其更改为:

<%= render 'outletproductform' %>

请注意,如果您正在寻找不在同一文件夹中的部分(在本例中为产品(,则需要参考正确的路径,即

<%= render 'some_model/some_partial' %>

这是的布局和渲染指南

相关内容

  • 没有找到相关文章

最新更新