Ruby on rails 使用Rails 4中的虚拟属性计算并显示日期
我正在尝试使用Rails中的虚拟属性计算和显示日期。我有一个模型,一个小组,每个小组有几个小组会议。还有一个GroupDates表,它存储每个组的第一个开始日期(管理员通过表单提交)以及时区。小组会议的时间由管理员决定 由于GroupDates表已经存在,因此我希望使用开始日期和周数计算每个会议日期,而不将日期保存在GroupMeetings表中。我试图使用一个虚拟属性来保存会议日期并显示它,但它显然不能持久化。有没有办法不在GroupMeeting上的列中保存会议日期 在我的模型中,我为一个组选择了所有的GroupMeetings(当管理员将一个组标记为活动时创建),并尝试进行迭代,使第一次会议的日期与组开始日期相同,并且在上一次会议后的每个后续会议Ruby on rails 使用Rails 4中的虚拟属性计算并显示日期,ruby-on-rails,virtual-attribute,Ruby On Rails,Virtual Attribute,我正在尝试使用Rails中的虚拟属性计算和显示日期。我有一个模型,一个小组,每个小组有几个小组会议。还有一个GroupDates表,它存储每个组的第一个开始日期(管理员通过表单提交)以及时区。小组会议的时间由管理员决定 由于GroupDates表已经存在,因此我希望使用开始日期和周数计算每个会议日期,而不将日期保存在GroupMeetings表中。我试图使用一个虚拟属性来保存会议日期并显示它,但它显然不能持久化。有没有办法不在GroupMeeting上的列中保存会议日期 在我的模型中,我为一个组
+7天
。在视图中,我遍历每个GroupMeeting,以编辑形式显示字段,以便主持人可以更新会议主题和笔记。我想在每个主题字段上方显示会议日期
分组会议模式:
class GroupMeeting < ActiveRecord::Base
belongs_to :group
has_many :users, through: :group, as: :group_users
validates :group, presence: true
attr_accessor :meeting_date
def generate_meeting_date
@meetings = GroupMeeting.where(group_id: self.group_id).order('id ASC')
@meetings.each_with_index do |meeting, index|
if self == @meetings.first
self.meeting_date = self.group.start_date
else
previous = @meetings[index-1]
self.meeting_date = previous.meeting_date + 7.days
end
end
return self.meeting_date.strftime("%a %b%e, %Y at %k%p")
end
end
class-GroupMeeting
相关查看/编辑表格:
<% @group_meetings.each do |meeting| %>
<%= fields_for 'meetings[]', meeting do |m| %>
<div class="field">
<strong><%= meeting.generate_meeting_date %></strong>
<%= m.text_field :topic, label: false %>
</div>
<div class="field">
<%= m.text_field :notes, label: false %>
</div>
<% end %>
我认为您的思路是对的,只是缺少了一个属性。您还可以为实例方法创建一个虚拟属性,这应该可以修复它
class GroupMeeting < ActiveRecord::Base
belongs_to :group
has_many :users, through: :group, as: :group_users
validates :group, presence: true
attr_accessor :meeting_date, :generate_meeting_date
def generate_meeting_date
@meetings = GroupMeeting.where(group_id: self.group_id).order('id ASC')
@meetings.each_with_index do |meeting, index|
if self == @meetings.first
self.meeting_date = self.group.start_date
else
previous = @meetings[index-1]
self.meeting_date = previous.meeting_date + 7.days
end
end
return self.meeting_date.strftime("%a %b%e, %Y at %k%p")
end
end
class-GroupMeeting
尽管如此,对于在UI中显示值,我可能会考虑在类上使用帮助程序而不是实例方法。帮助程序方法与类方法的优点。将尝试使用附加属性。谢谢