我試圖創建一個對象,並添加一個現有的對象到「has_many通過」關聯,但保存我的對象後,我的新創建的對象的引用設置在連接模型中爲零。我的「has_many通過」加入模型保存後沒有引用
具體而言,我創建了一個Notification對象,並將一個預先存在的Member對象添加到Notification.members關聯中。我使用嵌套的資源,我用以下相對URL調用通知控制器的新功能: /會員/ 1 /通知/新
填寫表單並提交後,創建函數被調用,從我從Rails Associations guide瞭解,第4.3.3節「?當對象保存」,各成員協會應在數據庫中創建時,新通知對象保存:
「如果父對象(一個聲明has_many關聯)未保存(即new_record?返回true),那麼子對象在添加時不會被保存。關聯的所有未保存的成員將自動當父母被保存時被保存。「
創建通知對象後,以下記錄在數據庫中創建:
select id, notification_id, notifiable_type, notifiable_id from deliveries;
1|<NULL>|Member|1
我工作圍繞這一問題通過添加成員對象的關聯,然後保存通知對象。起初,這似乎是現在好的解決方案,但我很快發現這有缺點。我不想在沒有成員關聯的情況下保存通知,因爲我必須爲我的回調編寫解決方法,以便它們不會在尚未生效的通知對象上開始執行任務。
我在這裏做錯了什麼?所有提示都表示讚賞。 :d
模型
class Notification < ActiveRecord::Base
has_many :deliveries, :as => :notifiable
has_many :members, :through => :deliveries, :source => :notifiable, :source_type => "Member"
has_many :groups, :through => :deliveries, :source => :notifiable, :source_type => "Group"
end
class Member < ActiveRecord::Base
has_many :deliveries, :as => :notifiable
has_many :notifications, :through => :deliveries
end
class Delivery < ActiveRecord::Base
belongs_to :notification
belongs_to :notifiable, :polymorphic => true
end
# Group is not really relevant in this example.
class Group < ActiveRecord::Base
has_many :deliveries, :as => :notifiable
has_many :notifications, :through => :deliveries
end
控制器
class NotificationsController < ApplicationController
def create
@notification = Notification.new(params[:notification])
@member = Member.find(params[:member_id])
@notification.members << @member
respond_to do |format|
if @notification.save
...
end
end
end
end