2011-04-29 103 views
0

嗨我無法將此關聯定義爲has_many,我希望這樣做可以使accept_nested_attributes_for工作。通過定義方法創建關聯

def work_days 
    work_days = WorkDay.user_id_equals(self.user_id).company_id_equals(self.company_id) 
end 

accepts_nested_attributes_for :work_days 

什麼是一個好的解決方案?無論如何,我可以說這是一個協會?

- 的Rails 3.0.7

回答

1

首先,我會寫work_days方法是這樣的:

def work_days 
    WorkDay.where(:user_id => user_id, :company_id => company_id) 
end 

接下來,accepts_nested_attributes_for真的是隻爲真正協會,所以我會定義一個方法像這樣:

def work_days=(work_day_params) 
    # iterate over work_day_params and define new work day objects as required 
end 

(我可能有方法名稱錯誤)

在你的表格你會是這樣的:

<% f.fields_for :work_days do |work_day| %> 
    <%= render :partial => "work_days/fields", :locals => { :f => work_day } %> 
<% end %> 

在這部分,你將有一切必要爲一個工作日。一旦提交了此表格,應將參數發送至控制器params[:nest][:work_days]以及在您的模型上定義的work_days=方法,它應該接受並創建它們,就像accepts_nested_attributes_for一樣。

+0

但是在你的控制器中,你可以調用@ obj.work_days.build? – fivetwentysix 2011-04-29 09:56:17

+0

@fivetwentysix:不,您只需將它作爲嵌套參數傳遞給父模型,模型中的代碼('work_days ='方法)將處理它。您的控制器不應對此負責。 – 2011-04-30 02:12:36