簡體   English   中英

嵌套屬性未在 rails 中更新

[英]Nested attributes are not updating in rails

我有 3 個模型:

class DropShipOrderLineItem < ActiveRecord::Base
  belongs_to :drop_ship_order
  belongs_to :line_item

  validates_associated :drop_ship_order
  validates_associated :line_item
  validates :drop_ship_order_id, :presence => true
  validates :line_item_id, :presence => true

  attr_accessible :missing

end

class DropShipOrder < ActiveRecord::Base

  attr_accessible :line_items, :line_items_attributes, :orders, :order_attributes

  belongs_to  :retailer
  belongs_to  :order
  belongs_to :shipping_method

  has_many    :drop_ship_order_line_items
  has_many    :line_items, :through => :drop_ship_order_line_items
  has_many    :shipments, :dependent => :destroy

  accepts_nested_attributes_for :line_items
  accepts_nested_attributes_for :order
  accepts_nested_attributes_for :drop_ship_order_line_items

  before_create :generate_order_number

  scope :by_number, lambda {|number| where("drop_ship_orders.number = ?", number)}
  scope :between, lambda {|*dates| where("drop_ship_orders.created_at between ? and ?", dates.first.to_date, dates.last.to_date)}
  scope :by_customer, lambda {|customer| joins(:order).joins(:user).where("users.email =?", customer)}
  scope :by_state, lambda {|state| where("state = ?", state)}
  scope :complete, where("drop_ship_orders.completed_at IS NOT NULL")
  scope :incomplete, where("drop+ship_orders.orders.completed_at IS NULL")

  make_permalink :field => :number

  validates_associated :order
  validates_associated :retailer
end

LineItem.class_eval do

  has_one :drop_ship_order_line_item, :dependent => :destroy
  has_one :drop_ship_order, :through => :drop_ship_order_line_items

  accepts_nested_attributes_for :drop_ship_order_line_item

  attr_accessible :drop_ship_order_line_item

#  def missing
#    self.drop_ship_order_line_item.missing
#  end

end

查看#1:

<div data-hook="admin_order_edit_form">
  <div id="order-form-wrapper">
    <%= render :partial => 'form', :locals => {:drop_ship_order => @drop_ship_order} %>
  </div>
</div>

查看表格:

<%= form_for(@drop_ship_order, :url => admin_drop_ship_order_path(@drop_ship_order), :html => { :method => :put}) do |f| %>
  <%= f.hidden_field :number %>
  <table class="index">
    <tbody id='line-items'>
      <tr data-hook="admin_order_form_line_items_headers">
        <th><%= t('item_description') %></th>
        <th class="price"><%= t('price') %></th>
        <th class="qty"><%= t('qty') %></th>
        <th class="total"><span><%= t('total') %></span></th>
        <th class="orders-actions" data-hook="admin_order_form_line_items_header_actions"></th>
      </tr>
      <%= f.fields_for :line_items do |li_form| %>
        <%= render :partial => "admin/drop_ship_orders/line_item", :locals => { :f => li_form } %>
      <% end %>
    </tbody>
    <tbody id='subtotal' data-hook="admin_order_form_subtotal">
      <tr id="subtotal-row">
        <td colspan="3"><b><%= t('subtotal') %>:</b></td>
        <td class="total"><span><%= number_to_currency @drop_ship_order.item_total %></span></td>
        <td></td>
      </tr>
    </tbody>

查看 line_item:

<tr id="<%= dom_id(f.object) %>" data-hook="admin_order_form_line_item_row">
  <td width="300"><%=f.object.variant.product.name%> <%= "(" + variant_options(f.object.variant) + ")" unless f.object.variant.option_values.empty? %></td>
  <td valign="top" class="price"><%= number_to_currency f.object.price %></td>
  <td valign="top" class="qty"><strong><%= f.object.quantity %></strong></td>
  <td valign="top" class="total"><%= number_to_currency (f.object.price * f.object.quantity)%></td>
  <td data-hook="admin_order_form_line_item_actions">
    <!--<input type="checkbox" name="apple" id="apples"/>-->
    <%#= f.object.drop_ship_order_line_item.missing %>
    <%= f.fields_for :drop_ship_order_line_item do |build|%>
        <%= build.check_box :missing, :type => "checkbox" %> 
    <% end %>

  </td>
</tr>

:missing 屬性沒有被更新,我就是不知道為什么。 盡管如果我手動更改 SQL 表中的值,則復選框被正確勾選。

ps:我剛剛發布了我的代碼的相關部分。

在您的 LineItem model attr_accessible:drop_ship_order_line_item更改為attr_accessible:drop_ship_order_line_item_attributes

以下代碼中的:type => "checkbox" 是什么:

<%= build.check_box :missing, :type => "checkbox" %> 

check_box 表單助手的第二個參數應該是方法。 我認為如果您更改為以下代碼,它應該可以工作:

<%= build.check_box :missing %> 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM