問題は、次のエラーが発生することです。
ActiveModel::MassAssignmentSecurity::Error: Can't mass-assign protected attributes: amenity_id
このコードを実行すると:
task import_amenities: :environment do
agent = Mechanize.new
Kindergarten.find_all_by_public(false).each do |k|
p = agent.get(k.uri)
amenities = p.search("td td tr:nth-child(11) td:nth-child(2)").text.split(/(;|,) */)
amenities.each do |a|
am = Amenity.find_or_create_by_name!("#{a}")
k.update_attributes(amenity_id: am.id)
end
end
end
幼稚園とアメニティは HABTM 関係によってリンクされており、以下のように定義されています。
幼稚園.rb
class Kindergarten < ActiveRecord::Base
attr_accessible :location, :name, :public, :uri, :address, :contact,
:phone, :url, :email, :description,
:password, :password_confirmation, :amenity_ids
has_and_belongs_to_many :amenities
end
amenity.rb
class Amenity < ActiveRecord::Base
attr_accessible :name, :kindergarten_ids
has_and_belongs_to_many :kindergartens
end
結合テーブルの移行は次のとおりです。
class CreateKindergartensAmenitiesJoinTable < ActiveRecord::Migration
def up
create_table :kindergartens_amenities, :id => false do |t|
t.integer :kindergarten_id
t.integer :amenity_id
end
end
end
このエラーは、rake タスクの次の行によって発生します。
k.update_attributes(amenity_id: am.id)
大量の割り当てに到達するまで、コンソールではすべてがうまく機能しているようです。そして、HABTM を使用したことがないので、ここで本当に何かを台無しにしていると思います。
何かご意見は?