私はRails 4.2を使用していますが、最近私のモデルでhas_manyという関係を使って試してみました。私は、レコードを更新し、それをどのように処理するのか分からない問題に直面しています。 私は名前がnilすることはできませんので、検証に失敗し、以下のコードRails - has_manyを使ってリレーションを保存し、親を保存せずに保存しました
@post = Post.find(1)
@post.name = nil
@post.tags_used = ["rails","ruby"]
@post.save
ポストを通じて既存のポストを更新する場合は、以下を検討し、私のモデル今
class Post < ActiveRecord::Base
attr_accessor: name
validates :name, :presence => true
has_many :post_tags
has_many :tags, :through => :post_tags, :autosave => false
def tags_used
self.tags.collect(&:name).join(',')
end
def tags_used=(list)
self.tags = list.present? ? Tag.where(:name => list.split(/\s*,\s*/)) : [ ]
end
end
class Tag < ActiveRecord::Base
has_many :post_tags
has_many :posts, :through => :post_tags
end
class PostTag < ActiveRecord::Base
belongs_to :post
belongs_to :tag
end
です。しかし、post_tagレコードは保存されています。
私は< <を試して、=のかわりに置き換えましたが、役に立たなかったです。あなたがトランザクション内でこのコードをラップする必要がポストレコードが
@faronに感謝します。私は取引を確認します。しかし、<<とautosave => falseの使用は何か –
Autosaveは、 'parent.save'が呼び出されたときに、ロードされたレコードに対して' save'を呼び出します。 Ex。 'post = Post.first; post.tags.to_a; post.save'は各タグに対して 'save'を呼び出します。感謝@edvin。 – faron