モデルに has_one 関係 (組織には 1 つのテンプレートがあります) があり、フォームを介して更新しようとしています。ただし、そうすると、次のエラーが表示されます。
ActiveRecord::AssociationTypeMismatch in OrganizationsController#update
Template(#70209323427700) expected, got String(#70209318932860)
モデルに示すように、各組織には多くのテンプレートが関連付けられていますが、現在のテンプレートは 1 つしかないため、これは少し複雑です。
class Organization < ActiveRecord::Base
validates :subdomain, :presence => true, :uniqueness => true
validates :current_template, :presence => true
has_many :organization_assignments
has_many :people
has_many :pages
has_many :templates
has_many :users, :through => :organization_assignments
has_one :current_template, :class_name => 'Template'
attr_accessible :name, :subdomain, :template_id, :current_template, :current_template_id
end
これが私のフォームです:
= simple_form_for @organization, :html => { :class => 'form-horizontal' } do |f|
- @organization.errors.full_messages.each do |msg|
.alert.alert-error
%h3
= pluralize(@organization.errors.count, 'error')
prohibited this organization from being saved:
%ul
%li
= msg
= f.input :name
= f.input :subdomain
= f.input :current_template, :collection => @organization.templates, :selected => @organization.current_template
.form-actions
= f.submit nil, :class => 'btn btn-primary'
= link_to t('.cancel', :default => t("helpers.links.cancel")), organizations_path, :class => 'btn'
そして、私のコントローラーは次のとおりです。
def update
@organization = Organization.find(params[:id])
respond_to do |format|
if @organization.update_attributes(params[:organization])
format.html { redirect_to @organization, notice: 'Organization was successfully updated.' }
format.json { head :no_content }
else
format.html { render action: "edit" }
format.json { render json: @organization.errors, status: :unprocessable_entity }
end
end
end
ネストされたフォームを使用してみました:
= simple_fields_for :current_template do |f|
= f.input :current_template, :collection => @organization.templates, :selected => @organization.current_template
しかし、関連するフォームを実際に変更せずに、ID # を変更するだけで成功します。私は何が欠けていますか?