簡體   English   中英

接受父模型的嵌套屬性

[英]Accepting nested attributes for parent model

嘗試接受User模型的嵌套屬性時,我收到以下錯誤:

Couldn't find User with ID=1 for Sale with ID=

促銷型號:

class Sale < ActiveRecord::Base

   belongs_to :user

   accepts_nested_attributes_for :user

end

用戶模型:

class User < ActiveRecord::Base
   has_many :sales
end

查看模板:

<%= form_for @sale, :html => {:class => "stagedForm bigForm"} do |f| %>
    <% if @sale.errors.any? %>  
        <div id="errorExplanation">  
            <h2><%= pluralize(@sale.errors.count, "error") %> prohibited this user from being saved:</h2>  
            <ul>  
                <% @sale.errors.full_messages.each do |msg| %>  
                    <li><%= msg %></li>  
                <% end %>  
            </ul>  
        </div>  
    <% end %>

    <fieldset>
    <legend>When</legend>
    <div class="field">
        <%= f.label :start_time %>
        <%= f.datetime_select :start_time, :minute_step => 10, :default => Time.now+1.week, :order => [:day, :month, :year] %>
      </div>
      <div class="field">
        <%= f.label :end_time  %>
        <%= f.datetime_select :end_time, :default => Time.now+( 1.week + 2.hours), :minute_step => 10, :order => [:day, :month, :year] %>
      </div>
    </fieldset> 

    <fieldset>
        <legend>Payment</legend>
        <%= f.fields_for :user do |u| %>
            <%= u.hidden_field :stripe_card_token %>
        <% end %>

    </fieldset>

    <div style="clear:both;"></div>
  <div class="actions">
    <%= f.submit "create", :id => "saveForm" %>
  </div>
<% end %>

銷售主管:

def new
    user = User.find(current_user.id)
    @sale = user.sales.build
    logger.debug "user locations #{user.locations}"
    @locations = user.locations
    1.times { @sale.items.build; @sale.build_location; }
  end


def create
    @sale = Sale.new(params[:sale])
    @sale.user_id = current_user.id

    logger.debug "Sale object!!!  #{@sale.inspect}"
    respond_to do |format|
      if @sale.save
        format.html { redirect_to @sale, notice: 'Sale was successfully created.' }
        format.json { render json: @sale, status: :created, location: @sale }
      else
        format.html { render action: "new" }
        format.json { render json: @sale.errors, status: :unprocessable_entity }
      end
    end
  end

嵌套屬性允許您通過父級保存關聯記錄的屬性。 所以你應該在用戶模型中擁有accepts_nested_attributes_for:sales。

當您嘗試使用銷售作為子記錄更新用戶模型時,嵌套屬性會受到攻擊。

您應該使用hidden_​​field_tag從視圖中傳遞user_id(上面與Sale相關聯)或者當銷售屬於User時,您可以使用select標簽來選擇用戶。

http://api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html

暫無
暫無

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

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