ruby-on-rails - 如何在产品页面显示所有门店并将产品分配给特定门店

标签 ruby-on-rails ruby

我是 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

Error shown in website

Error shown in console

After add-outlet clicked (in console)

The page after clicked Add Outlet

更新

Error shown in website after made changes

最佳答案

在 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/

相关文章:

ruby-on-rails - 在开发中运行 rails 控制台时,ActiveResource 添加了一个额外的类

MySQL 全文索引与 Rails 2.3.2(迁移问题)

mysql - 'DELIMITER $$' 附近的错误

ruby - 如何将方法作为字符串传递并调用它

ruby-on-rails - 将数字字符串转换为数字数组

ruby - 使用 RVM 的 Hadoop Streaming 找不到 Gem

c - 添加到函数指针,以获得指向另一个函数的指针?

ruby-on-rails - Rails 安装错误 - 无法构建 gem native 扩展

ruby-on-rails - Nokogiri 依赖项 libxml 和 libxslt 未安装

ruby - module_eval/class_eval/instance_eval 如何统计行号