に挿入します私が 'facility.save'を呼び出さない限りデータベース要求を避ける方法がありますか?Railsのhas_and_belongs_to_manyアソシエーションはいつも私の問題である。ここデータベース
明らかに、:ここでは自動保存オプションは別のことをします。
に挿入します私が 'facility.save'を呼び出さない限りデータベース要求を避ける方法がありますか?Railsのhas_and_belongs_to_manyアソシエーションはいつも私の問題である。ここデータベース
明らかに、:ここでは自動保存オプションは別のことをします。
has_and_belongs_to_many
は、Model
に基づいていないので、オブジェクトとしてアクセスできません。アソシエーションを行っているModel
を作成し、このアソシエーションモデルの新しいオブジェクトを作成することができます。例えば:他のモデルでモデル
class JoinClass < ActiveRecord::Base
belongs_to :faculty
belongs_to :language
end
で
rails g scaffold JoinClass faculty_id:integer language_id:integer
:
学部
class Faculty < ActiveRecord::Base
has_many :join_classes
has_many :languages, :though => :join_classes
end
言語
class Language < ActiveRecord::Base
has_many :join_classes
has_many :faculties, :through => :join_classes
end
次に、自動的に保存されない関連オブジェクトを作成して関連付けを追加することができます。このコードは、教員の保存後に調整され、配置されなければならない原因の
language_ids.split(",").each do |language_id|
JoinClass.create(:faculty_id => @faculty.id, :language_id => language_id)
end
:たとえば、あなたはFacultyController
にlanguage_ids
呼ば関連付けられている必要があり、言語オブジェクトのIDが含まれていString
含むIDを持っています。
facility.languages = [言語]
またはfacility.languages + = [言語]、またはその他の配列演算子。それを試して、それはまだデータベースクエリを送信します。 – Nox
あなたはシャベル演算子< <のRailsを使用している場合は、自動的に関連するオブジェクトが保存されます。
ドキュメントから http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html
コレクションは< <(オブジェクト、...)
結合表で 作成団体による収集(collection.pushと コレクションに1つまたは複数のオブジェクトを追加します。 .concatはこのメソッドのエイリアスです)。この 操作では、親オブジェクトの更新コールまたは保存コールを待つことなく、すぐにupdate sqlが起動されることに注意してください。
=または+ =を代わりに使用すると、これも発生します。 facility.languages = [Language.find(3)] は>>(1、2) > IN 'facilities_languages'.'facility_id' = 1と' 'facilities_languages'.'language_id' facilities_languages' FROM DELETE > INSERT INTO 'facilities_languages'(' language_id'、 'facility_id')VALUES(3,1) – Nox
ここで 'facility.languages << language 'という行で何をしようとしていますか? –