has_many
との関係を使用して、3 つのモデルを持つ Rails 3 アプリを作成しようとしていますbelongs_to
。AssociationTypeMismatch
フォームを送信しようとするとエラーが発生します。具体的Location(#70232625418240) expected, got String(#70232609906560)
には、私が設定したモデルは次のとおりです。
- 食べ物
- 位置
- 月
現在、Food モデルと Location モデルの接続に取り組んでいます。@food
チェックボックスとしてエントリを取り込む単純なフォーム フォームを作成しました@location
。locations
さまざまな場所をチェックして選択し、Food モデルのインデックスに関連付けたいと思います。
チェックボックスを配列として送信しようとしているので、場所を食べ物に関連付けることができます。そのため、場所 ID を送信します。これにより、食品エントリに関連付けられた各場所の場所名を取得できると思います。
私のモデルはこのように設定されています:
food.rb
class Food < ActiveRecord::Base
attr_accessible :area, :description, :icon, :iconSource, :image, :locations, :months, :name, :source, :type, :month_id
has_many :locations
has_many :months
end
location.rb
class Location < ActiveRecord::Base
attr_accessible :city, :region, :regionName, :state, :title, :food_id, :month_id, :locations_id
has_many :months
belongs_to :foods
end
私が設定したフォームは次のようになります。
new.html.erb
<%= form_for @food do |f| %>
<%= render 'shared/error_messages', object: f.object %>
<div class="field">
<%= f.text_field :name, placeholder: "Name", :class => 'field-name' %>
</div>
<% for location in Location.find(:all) %>
<div>
<%= check_box_tag "food[locations_id][]", location.id %>
<%= location.title %>
</div>
<% end %>
<%= f.submit "Post" %>
<% end %>
Foods コントローラーは create アクションを使用してフォームを処理しています。
food_controller.rb
class FoodsController < ApplicationController
def index
@foods = Food.all
end
def new
@food = Food.new
@locations = Location.all
end
def create
@food = Food.new(params[:food])
if @food.save
redirect_to foods_url(@food), :notice => "Food created!"
else
render :action => "new"
end
end
end
Foods モデルに関連するデータのみを入力している場合、フォームは問題なく送信されます。しかし、場所のチェックボックスの 1 つを選択してフォームを送信しようとすると、このLocation(#70232625418240) expected, got String(#70232609906560)
エラーが発生します。残りの出力は次のとおりです。
app/controllers/foods_controller.rb:10:in `new'
app/controllers/foods_controller.rb:10:in `create'
Parameters:
{"utf8"=>"✓",
"authenticity_token"=>"QThXhDG8pPJcRVTTW6FXmo6MhGcoUeUspBhRtrbsbig=",
"food"=>{"name"=>"Apple",
"locations"=>["1"]},
"commit"=>"Post"}
これを数時間調べた後、これを修正するために見つけたすべてのことを試しました。の代わりにを使用する必要があることに気づきました。しかしその後、私はここで他のソリューションに空っぽになっています。誰かに同様の問題がありましたか?location_id
locations