有很多类似的主题,但它不帮助我。 有一个帐户模型使用来自窗体中关联模型的数据,Rails 3
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,但实际上我不知道他们需要与否。发生
<%= 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 %>
,当我试图箱帐户错误:美元,欧元,卢布
class Currency < ActiveRecord::Base
has_many :accounts
attr_accessible :id
accepts_nested_attributes_for :accounts
end
所以在帐户形式我有一个货币选择框 - 即有3个项目的另一个模型货币:
ActiveRecord::AssociationTypeMismatch in AccountsController#create
Currency(#52889580) expected, got ActiveSupport::HashWithIndifferentAccess(#28841960)
请求参数:
{"utf8"=>"✓",
"authenticity_token"=>"VfCshuGyldoI5Q5DThT/RDpwewCh91apgsnmxyppWqI=",
"account"=>{"name"=>"Основной наличный счет",
"currency"=>{"id"=>"3"}},
"commit"=>"Save"}
如果我尝试从标识手动查找货币:
param = params[:account]
param[:currency] = Currency.find(param[:currency][:id])
@account = Account.new(param)
有由巫名称一个新的错误不存在。我不喜欢我应该手动设置:id => "account_currency_id", :name => "account[currency][id]"
,因为默认情况下它们都是“货币”。 Rails 3.1
非常感谢。此外,我的问题是,帐户有列'货币'没有'_id',所以我加了它,它现在正常工作。 – zishe
很高兴能听到:) – DanneManne