通过定义方法创建关联

时间:2011-04-29 02:42:45

标签: ruby-on-rails activerecord

您好我将此关联定义为has_many,我希望这样做才能让accepts_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 个答案:

答案 0 :(得分: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作为params[:nest][:work_days]发送给控制器,并使用模型中定义的work_days=方法,它应接受它们并像accepts_nested_attributes_for一样创建它们。