Есть много похожих тем, но это мне не помогает.
Есть модель аккаунта
class Account < ActiveRecord::Base
belongs_to :user
belongs_to :currency
attr_accessible :currency
accepts_nested_attributes_for :currency
end
Я добавил attr_accessible и accepts_nested_attributes_for, но на самом деле я не знаю, нужны они или нет. Другая модель валюты, которая имеет 3 пункта - USD, EUR, RUR
class Currency < ActiveRecord::Base
has_many :accounts
attr_accessible :id
accepts_nested_attributes_for :accounts
end
Итак, в форме аккаунта у меня есть поле выбора с валютой:
<%= form_for @account do |f| %>
<div class="field">
<%= f.label :name %><br />
<%= f.text_field :name %>
</div>
<div class="field">
<%= f.label :currency %><br />
<%= select_tag(:currency, options_from_collection_for_select(Currency.all, :id, :name),\
:id => "account_currency_id", :name => "account[currency][id]", :prompt => "Выберите валюту...")%>
</div>
<div class="actions">
<%= f.submit "Сохранить" %>
</div>
<% end %>
И когда я пытаюсь создать ящик, произошла ошибка аккаунта:
ActiveRecord::AssociationTypeMismatch in AccountsController#create
Currency(#52889580) expected, got ActiveSupport::HashWithIndifferentAccess(#28841960)
Параметры запроса:
{"utf8"=>"✓",
"authenticity_token"=>"VfCshuGyldoI5Q5DThT/RDpwewCh91apgsnmxyppWqI=",
"account"=>{"name"=>"Основной наличный счет",
"currency"=>{"id"=>"3"}},
"commit"=>"Save"}
Если я пытаюсь найти валюту из Id вручную:
param = params[:account]
param[:currency] = Currency.find(param[:currency][:id])
@account = Account.new(param)
Произошла новая ошибка, ведьма Имя не существует. И мне не нравится, что я должен вручную установить :id => "account_currency_id", :name => "account[currency][id]"
, потому что по умолчанию они оба "валюта".
Рельсы 3.1