【问题标题】:Passing one model to another model as attribute将一个模型作为属性传递给另一个模型
【发布时间】:2019-12-11 01:46:52
【问题描述】:

我在 Rails 上做一个应用程序,您可以在其中访问餐厅并从他们提供的盘子中下订单。我现在要做的是为名为“Cart”的购物车创建了一个脚手架,我想在您创建订单时将其分配给它(这也是一个脚手架)。

应该是在您完成购物车并按“继续订购”(views/cart/show.html.erb) 时,它会将您重定向到 new_order_path,它会询问您其他人的其他属性,例如地址,并且付款方式。我很困惑当您创建订单时何时可以分配您所在的购物车。

另外,我已经有了这个(在 cart.rb 上):

class Cart < ApplicationRecord
    belongs_to :order 

这个在 order.rb 上:

class Order < ApplicationRecord
  belongs_to :user
  has_one :cart

(更新)在您提交其他参数以通过执行此操作完成表单上的订单时,我正在分配购物车:

<%= form_with(model: order, local: true) do |form| %>
.
.
.
 <div class="actions">
    <%= form.submit do order.asign(Cart.find(session[:cart_id])) %>
  </div>
<% end %>

但它不起作用

【问题讨论】:

  • 你能分享更多你的代码吗?您是否发现任何错误?
  • 当然!我只是迷失了哪些文件有用,购物车和订单的控制器?关于错误,它在订单索引&lt;p&gt;Total: &lt;%= order.cart.total_price %&gt;&lt;/p&gt; 上显示此行的undefined method 'total_price' for nil:NilClass,这意味着订单没有收到购物车
  • 我一直在尝试在 orders_controller 上添加以下内容:def show @order.cart = Cart.find(order_id: params[:id]) end 但它仍然没有将购物车分配给订单

标签: ruby-on-rails


【解决方案1】:

在您的 show.html.erb 文件中,更改:

&lt;p&gt;Total: &lt;%= order.cart.total_price %&gt;&lt;/p&gt;

收件人:

&lt;p&gt;Total: &lt;%= @order.cart.total_price %&gt;&lt;/p&gt;

并且在OrdersController 中的show 操作中实现:

def show
  @order = Order.find(params[:id]) 
end

我假设您在 params[:id] 下传递订单 ID

您将继续收到您遇到的错误,直到有一个有效的cart 对象连接到order

要解决这个问题,您可以在show.html.erb 中执行以下操作:

&lt;p&gt;Total: &lt;%= @order.cart.total_price || 0 %&gt;&lt;/p&gt;

如果没有与order 关联的cart,它会将total_price 显示为0

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-24
    • 1970-01-01
    相关资源
    最近更新 更多