答えて

1

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 

:たとえば、あなたはFacultyControllerlanguage_ids呼ば関連付けられている必要があり、言語オブジェクトのIDが含まれていString含むIDを持っています。

0

facility.languages = [言語]

+0

またはfacility.languages + = [言語]、またはその他の配列演算子。それを試して、それはまだデータベースクエリを送信します。 – Nox

1

あなたはシャベル演算子< <のRailsを使用している場合は、自動的に関連するオブジェクトが保存されます。

ドキュメントから http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html

コレクションは< <(オブジェクト、...)

結合表で 作成団体による収集(collection.pushと コレクションに1つまたは複数のオブジェクトを追加します。 .concatはこのメソッドのエイリアスです)。この 操作では、親オブジェクトの更新コールまたは保存コールを待つことなく、すぐにupdate sqlが起動されることに注意してください。

+0

=または+ =を代わりに使用すると、これも発生します。 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

関連する問題