Почему я получаю 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

Я не уверен, почему это не распознает атрибуты обменного курса?

Спасибо

12
задан Maxm007 18 April 2010 в 17:16
поделиться

1 ответ

Проблема в том, что accept_nested_attributes_for: exchange_rate ищет «exchange_rate_attributes» в параметрах, а не «exchange_rate» . Помощник fields_for сделает это за вас, но вы должны изменить его на:

<% contractForm.fields_for :exchange_rate do |rateForm|%>
25
ответ дан 2 December 2019 в 06:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: