2010-04-18 80 views
8

我收到以下错误:为什么创建模型对象时会出现AssociationTypeMismatch?

ActiveRecord::AssociationTypeMismatch in ContractsController#create 

ExchangeRate(#2183081860) expected, got HashWithIndifferentAccess(#2159586480) 

Params: 
{"commit"=>"Create", 
"authenticity_token"=>"g2/Vm2pTcDGk6uRas+aTgpiQiGDY8lsc3UoL8iE+7+E=", 
"contract"=>{"side"=>"BUY", 
"currency_id"=>"488525179", 
"amount"=>"1000", 
"user_id"=>"633107804", 
"exchange_rate"=>{"rate"=>"1.7"}}} 

我的相关模型为:

class Contract < ActiveRecord::Base 
    belongs_to :currency 
    belongs_to :user 
    has_one :exchange_rate 
    has_many :trades 

    accepts_nested_attributes_for :exchange_rate 
end 

class ExchangeRate < ActiveRecord::Base 
    belongs_to :denccy, :class_name=>"Currency" 
    belongs_to :numccy, :class_name=>"Currency" 
    belongs_to :contract 
end 

我的看法是:

<% form_for @contract do |contractForm| %> 


    Username: <%= contractForm.collection_select(:user_id, User.all, :id, :username) %> <br> 


    B/S: <%= contractForm.select(:side,options_for_select([['BUY', 'BUY'], ['SELL', 'SELL']], 'BUY')) %> <br> 


    Currency: <%= contractForm.collection_select(:currency_id, Currency.all, :id, :ccy) %> <br> <br> 


    Amount: <%= contractForm.text_field :amount %> <br> 

    <% contractForm.fields_for @contract.exchange_rate do |rateForm|%> 
     Rate: <%= rateForm.text_field :rate %> <br> 
    <% end %> 

    <%= submit_tag :Create %> 

<% end %> 

我的视图控制器:

class ContractsController < ApplicationController 

    def new 
    @contract = Contract.new 
    @contract.build_exchange_rate 


    respond_to do |format| 
     format.html # new.html.erb 
     format.xml { render :xml => @contract } 
    end 

    end 

    def create 
    @contract = Contract.new(params[:contract]) 

    respond_to do |format| 
     if @contract.save 
     flash[:notice] = 'Contract was successfully created.' 
     format.html { redirect_to(@contract) } 
     format.xml { render :xml => @contract, :status => :created, :location => @contract } 
     else 
     format.html { render :action => "new" } 
     format.xml { render :xml => @contract.errors, :status => :unprocessable_entity } 
     end 
    end 
    end 

我不知道为什么不承认汇率属性?

谢谢

回答

20

的问题是,accepts_nested_attributes_for :exchange_rate查找"exchange_rate_attributes"的参数,可以不"exchange_rate"fields_for帮手会为你做这件事,但你必须改变它:

<% contractForm.fields_for :exchange_rate do |rateForm|%> 
+0

这工作。谢了哥们。 – Maxm007 2010-04-18 22:26:34

相关问题