我是 Ruby on Rails 的新手,我正在做的是一個雜貨店網站。公司有很多網點和產品。
管理員可以添加產品和分店,可以有不同的產品和分店,每個分店可以有相同的產品但價格不同(例如分店 A 和 B 有魚,但 A 是 5 美元,B 是 6 美元)
管理員可以選擇并選擇將一個專案分配給一個出口并編輯價格,最終結果將存盤在OutletProduct表格中。
以下是我所做的,但它不起作用并顯示錯誤。
產品控制器代碼:
def outlet
@outlet = Outlet.find(params[:id])
end
def add
@product = Product.find(params[:id])
@outlet = Outlet.find(params[:outlet_id])
end
def update
@product = Product.find(params[:id])
@outlet = Outlet.find(params[:outlet][:name])
if @product.update(product_params)
flash[:success] = "Product updated"
redirect_to @product
else
render 'add'
end
end
顯示.html.erb
<% provide(:title, @product.name)%>
<%= render @product %>
<div class="row">
<aside class="col-md-4">
<section class="stats">
<%= render 'shared/stats' %>
</section>
<div>
<%= link_to "Add to Outlet", add_path %> |
<%= link_to "Back to products", products_path %>
</div>
</aside>
</div>
添加.html.erb
<h1>Add to outlet</h1>
<div >
<div >
<%= form_with(model: @product, local: true) do |f| %>
<%= render 'shared/error_messages', object: f.object %>
<%= f.label :name %>
<%= f.text_field :name, class: 'form-control' %>
<%= f.label :quantity %>
<%= f.number_field :quantity, class: 'form-control' %>
<%= f.label :price %>
<%= f.number_field :price, class: 'form-control' %>
<%= f.label :outlet %>
<%= f.select :outlet, options_for_select(@outlets), :include_blank => true %>
<%= f.hidden_field :category_id, value: 1 %>
<%= f.submit "Save changes", class: "btn btn-primary" %>
<% end %>
</div>
</div>
產品遷移表代碼:
class CreateProducts < ActiveRecord::Migration[7.0]
def change
create_table :products do |t|
t.string :name
t.integer :quantity
t.integer :price
t.integer :category_id
t.timestamps
end
end
end
網站顯示錯誤
控制臺中顯示錯誤
單擊添加出口后(在控制臺中)
點擊添加插座后的頁面
更新
更改后網站顯示錯誤
uj5u.com熱心網友回復:
在 ProductsController for actionadd中,它出錯了,因為params[:id]和params[:outlet_id]為零。
在 show.html.erb 中<%= link_to "Add to Outlet", add_path %>,它鏈接到 add_path 但沒有指定idor的值outlet_id應該是什么。
嘗試將其更改為add_path(@product)或add_path(id: @product.id)
對于outlet_id,看起來這可能不需要,相反,您可能想要更改添加操作以回傳一個出口串列:
def add
@product = Product.find(params[:id])
@outlets = Outlet.all
end
更新
新錯誤告訴您outlet object沒有名為 的方法outlet。這是由以下原因引起的:Outlet.all.collect { |l| [l.outlet, l.id] }。您可以使用l.name而不是l.outlet.
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/510038.html
標籤:轨道上的红宝石红宝石
下一篇:將多個陣列合并到一個哈希陣列中
