私のモデル
Annotationのフォームを作成しようとしています。このアノテーションはMapに属し、各アノテーションには 1 つのBoundaryが必要です。マップには多くの注釈を含めることができます。
最初にAnnotationとMap has_one
Boundaryの両方を使用して関連付けを作成しましたが、後で polymorphic の使用に切り替えましたboundary_object
。エラーは関係なく同じでした。
has_one :boundary, :as => :boundary_object # <= Map
has_one :boundary, :as => :boundary_object # <= Annotation
belongs_to :boundary_object, :polymorphic => true # <= Boundary
ビューとコントローラー
事は次のとおりですBoundary.new
。フォームは複数回送信できるため、事前に設定された注釈オブジェクトがなかったため、最初にここで新しい境界オブジェクトを作成していました。
maps/show.html.erb
<%= form_for([@map, Annotation.new], :remote => true ) do |f| %>
<%= f.text_area :body, :cols => 80, :rows => 10, :style => "width: 500px" %>
<%= f.fields_for Boundary.new do |b| %>
<%= b.text_field :ne_x, :style => "display:none" %>
<%= b.text_field :ne_y, :style => "display:none" %>
<%= b.text_field :sw_x, :style => "display:none" %>
<%= b.text_field :sw_y, :style => "display:none" %>
<% end %>
<% end %>
f.fields_for :boundary
にこれがある場合、私も使用できますmaps_controller.rb
:
@annotation = @map.annotations.build
@annotation.boundary = Boundary.new
しかし、結果は同じです。
annotations_controller.rb
def create
@annotation = Annotation.new(params[:annotation])
respond_to do |format|
if @annotation.save
format.js { }
end
end
エラー
そのフォームを送信すると、メソッドの最初の行で次のエラーが発生しますcreate
。
ActiveRecord::AssociationTypeMismatch (Boundary(#2158793660) が予想され、ActiveSupport::HashWithIndifferentAccess(#2165684420) を取得)
明らかに、フォームは境界全体がなくても機能します。提出されたパラメータは次のとおりです。
{
"utf8"=>"✓",
"authenticity_token"=>"6GDF6aDc6GMR3CMP+QzWKZW9IV9gSxfdkxipfg39q7U=",
"annotation"=>
{
"body"=>"foo bar",
"boundary"=>
{
"ne_x"=>"11312",
"ne_y"=>"5919",
"sw_x"=>"6176",
"sw_y"=>"1871"
}
},
"map_id"=>"1"
}
この注釈のBoundaryオブジェクトをすぐに作成できるようにするには、どうすればよいですか?