我有一个用户模型和一个跟踪器模型。用户 has_many Trackers 和 Tracker belongs_to User。User 模型有一个名为 tracker_date 的虚拟属性,我希望能够在 Tracker 模型的 before_save 回调中使用它。回调应该为通过嵌套属性关联同时更新的所有 Tracker 记录设置 Tracker 模型中的日期。这可能吗?还是有更好的方法来做我想做的事情?
风景:
<%= form_for @user, :url => {:controller => 'trackers'}, :method => 'post' do |f| %>
<%= f.label :tracker_date, "Week ending" %>
<%= f.text_field :tracker_date %> <br />
<% @user.top_items.each do |item| %>
<%= f.fields_for :trackers, item.trackers.build do |g| %>
<%= item.top_item_name %>
<%= g.text_field :value %>
<%= g.hidden_field :position_id, :value => item.id %> <br />
<% end %>
<% end %>
<%= f.submit "Submit" %>
<% end %>
用户.rb
has_many :trackers
accepts_nested_attributes_for :trackers
attr_accessor :tracker_date
attr_accessible :tracker_date, :trackers_attributes
追踪器.rb
belongs_to :user
attr_accessible :date
before_save :set_date
def set_date
self.date = self.user.tracker_date
end
在此示例中,日期未在 Tracker 模型中使用来自 User 模型的虚拟属性中的值进行设置。我还尝试使用 User 模型中的虚拟属性在 Tracker 模型中进行简单验证,但这也不起作用。有没有办法让它工作,或者有没有更好的方法来避免使用虚拟属性或允许嵌套模型访问虚拟属性?
谢谢。