2014-03-26 17 views
0

我有一个名为Period的模型,它有一个名为start_date的列。我也有一个名为Announcement的模型,它属于PeriodPeriod has_many到Announcements创建公告并将其与周对象关联,如果其中一个不存在

当我创建一个Announcement我想将它关联到Period,但我首先要检查是否Period记录存在的announcementscreated_at日期匹配。如果Period记录确实存在,只需将period_id添加到Announcement即可。

如果没有,则创建Period记录并将其ID添加到announcement

这里是我的代码为我的两个模型到目前为止

期模型:

class Period < ActiveRecord::Base 
    has_many :announcements 

    def self.find_or_create(date) 
    start_date = date.beginning_of_week 
    where(start_date: start_date).first || create_through_related(date) 
    end 

    def self.create_from_related(date) 
    start_date = date.beginning_of_week 
    create! do |period| 
     period.start_date = date.start_date 
     period.duration = 7 
    end 
    end 
end 

公告方式:

过滤器之前
class Announcement < ActiveRecord::Base 
    belongs_to :period 
end 
+0

有一点要澄清 - 在哪一点你希望他的联系发生。储存通告后? – BroiSatse

+0

理想情况下,我希望将该通知与week_id一起保存。所以我猜猜发现或创建一周的逻辑需要发生之前。 但是,我需要公告中的'created_at'日期来计算一个星期是否存在。 这有点鸡或鸡蛋 –

回答

1

阿?

class Announcement < ActiveRecord::Base 
    belongs_to :period 

    before_create :assoc_period 

    private 

    def assoc_period 
     self.period = Period.find_or_create(self.created_at) 
    end 
end 
+0

这看起来像它会工作,但self.created_at会是什么? –

+0

created_at? “我首先要检查是否存在与通告created_at date” –

+0

相匹配的期间记录。因此,我将刚刚发送的通告created_at日期保存起来? –

相关问题