Я пытаюсь отобразить и перехватить только самый последний элемент из отношения * has_many *. По сути, я хочу найти один объект, который существует в отношении * has_many * (на основе некоторых критериев), и отобразить его вместе с записью.
У меня есть классовые отношения, определенные так (урезано):
class Member < ActiveRecord::Base
has_many :member_status_histories
has_many :member_statuses, :through => :member_status_history
end
class MemberStatusHistory < ActiveRecord::Base
belongs_to :member_status
belongs_to :member
has_one :timespan
end
class MemberStatus < ActiveRecord::Base
attr_accessible :name
has_many :memberStatusHistories
has_many :members, :through => :memberStatusHistories
end
class Timespan < ActiveRecord::Base
attr_accessible :startDate, :endDate
belongs_to :timespanable, :polymorphic => true
end
В частности, используя приведенные выше классы и отношения, я хочу иметь страницу, которая отображает объект member и один объект history status object, у которого нет даты окончания. Если пользователь изменяет поля на странице для истории статуса участника , я хочу взять эту информацию и создать новый объект истории статуса участника и сохранить ее в member_status_histories в член .
Я пробовал несколько вещей, но, учитывая, что я новичок в RoR, я не уверен, какой подход использовать для этого. Кажется, есть несколько способов попытаться заставить это работать, но я не смог заставить ни один из них работать полностью.
Идея, которая показалась мне наиболее разумной, заключалась в использовании виртуального атрибута. Виртуальный атрибут предоставит объект истории статусов , который я хотел бы отобразить, а затем, когда пользователь отправит обновленные member и историю статусов , я мог запустить некоторую бизнес-логику для виртуального атрибута (используя before_save) и при необходимости обновить поле * member_status_histories *.
Опять же, мне не удалось найти какой-либо подход к работе, поэтому я открыт для предложений о том, как этого добиться. Спасибо!