2016-01-10 32 views
0

我在我的Rails應用程序中有一個數據庫,其中包含每個project中的positions列表。用戶可以爲他們正在處理的當前項目添加/刪除職位。當用戶創建新項目時,我希望將這些職位中的一部分作爲默認值。這可能嗎?Rails在表單上生成數據庫行提交

回答

1

是的。我建議在你的項目模型使用after_save的回調

所以,在你的模型:

def before_save 
    @was_a_new_record = new_record? 
    return true 
end  
after_save :create_positions 

def create_positions 
    Position.create name: 'Manager', project_id: self.id if @was_a_new_record 
    # repeat as required 
end 
+0

由於某種原因,這似乎沒有工作.... –

+0

好吧,我似乎因爲做出太多假設而陷入困境,因爲我填充了一些可能的值的差距,並假設這些值會被調整爲匹配模型實際設置的方式。我的壞,我會更仔細地去。我假設你的職位類名稱和你在其中分配的變量。它們匹配嗎,你有特別的錯誤嗎? – Tim

+0

我有一個位置標題字符串叫'位置',每個位置都有一個'project_id',它應該是創建的新項目。我已經調整了您提供的代碼以適應這些值,並且我沒有收到錯誤,但似乎沒有任何內容顯示在表格中,我應該顯示與當前項目關聯的位置。編輯:我只是調試了一下,看到有沒有project_id被保存在創建。 –

1
#app/models/project.rb 
class Project < ActiveRecord::Base 
    has_many :positions 

    before_create :set_positions 
    accepts_nested_attributes_for :positions #-> required for Rails 4.2+ 

    private 

    def set_positions 
     3.times do 
     self.positions.build 
     end 
    end 
end 

當用戶創建一個新的項目

在創建project之前,上面將構建關聯的position對象。您可以添加特定的屬性到每個新的對象:

self.projects.build name: "test" 

它的妙處在於,所有的記錄將在同一時間進行保存,使得它特別有效。

+0

每個職位都有一個關聯的project_id,是否可以通過此方法創建?如果你看看上面的答案就會顯示出這種困境。 –