【问题标题】:Rails3 update existing record, create new simultaneouslyRails3 更新现有记录,同时创建新记录
【发布时间】:2013-09-25 07:33:32
【问题描述】:

报价模型有许多变量。可以将报价作为 LineItem 添加到购物车中。 引用 has_many :line_items,

LineItem 
  belongs_to :quote
  accepts_nested_attributes_for :quote

这个想法是,如果一个报价被添加到购物车,它的状态会改变 (:final => true) quote_controller 在其 show 动作中实例化

 @line_item = LineItem.new

报价的显示视图包括一个需要同时做两件事的表单:

  1. 创建line_item。这是由<%= f.hidden_field :quote, :value => @quote.id %> 生成的
  2. 更新报价。

第二个元素是问题

<%= form_for(@line_item) do |f| %>
 [...]
  <%= fields_for @line_item.quote do |quote_fields| %>
    <%= quote_fields.hidden_field :final, :value => true %>
  <% end %>
<% end %>

这将返回错误undefined method 'model_name' for NilClass:Class。奇怪的是,上下文已经是那个模型了。

【问题讨论】:

  • 尝试将&lt;%= fields_for @line_item.quote do |quote_fields| %&gt;更改为&lt;%= f.fields_for :quote do |quote_fields| %&gt;
  • 对,我明白了。我会尝试一下,但解决方案与语法无关:需要在概念上进行简化。
  • 这不是语法。当@line_item.quote 返回nil 时,这很可能是错误的原因。

标签: ruby-on-rails ruby-on-rails-3


【解决方案1】:

问题是花园小径。错误是

A quote can be added to a Cart, as a LineItem.

不需要 LineItem。报价可以属于购物车。 cart_id 的分配可以解决问题。 然后显示视图包含一个用于编辑同一条记录的表单

    <%= form_for(@quote) do |f| %>
      <%= f.hidden_field :cart_id, :value => @cart.id %>

然后购物车会包含它的所有报价以及它需要的任何东西。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-12
    • 2012-07-25
    • 2021-03-30
    • 2011-12-10
    • 2020-06-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多