嵌套属性不会在轨

问题描述:

更新我有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> 

The:missing属性没有被更新,我只是不明白为什么!尽管如果手动更改我的SQL表中的值,复选框被正确勾选。

p.s:我刚刚发布了我的代码的相关部分。

在你的LineItem模式的变革attr_accessible :drop_ship_order_line_itemattr_accessible :drop_ship_order_line_item_attributes

什么是:类型=>“复选框”为在下面的代码:

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

为check_box形式助手应该是该方法的第二个参数。我认为,如果你换到下面的代码,它应该工作:

<%= build.check_box :missing %> 
+0

我不认为这是一个问题,为了保持安全我把它拿出来,问题仍然存在:/ – mabounassif