我是 Ruby on Rails 的新手,我正在做的是一个杂货店网站。公司拥有众多网点和产品。
管理员可以添加产品和销售点,可以有不同的产品和销售点,每个销售点可以有相同的产品但价格不同(示例销售点 A 和 B 有鱼,但 A 是 5 美元,B 是 6 美元)
管理员可以选择将商品分配给门店并编辑价格,最终结果将存储在OutletProduct
表中。
下面是我所做的,但它不起作用并显示错误。
产品 Controller 代码:
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
show.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 class="row">
<div class="col-md-6 col-md-offset-3">
<%= 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
After add-outlet clicked (in console)
The page after clicked Add Outlet
更新
最佳答案
在 ProductsController 中执行操作 add
,它出错了,因为 params[:id]
和params[:outlet_id]
为零。
在 show.html.erb <%= link_to "Add to Outlet", add_path %>
它链接到 add_path 但没有指定 id
的值是什么或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
.
关于ruby-on-rails - 如何在产品页面显示所有门店并将产品分配给特定门店,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73856317/