Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何显示多个关系中的一个项目?如何对对象进行更改,然后在has\u many中创建新项?_Ruby On Rails_Ruby On Rails 3_Activerecord_Ruby On Rails 3.1_Has Many - Fatal编程技术网

Ruby on rails 如何显示多个关系中的一个项目?如何对对象进行更改,然后在has\u many中创建新项?

Ruby on rails 如何显示多个关系中的一个项目?如何对对象进行更改,然后在has\u many中创建新项?,ruby-on-rails,ruby-on-rails-3,activerecord,ruby-on-rails-3.1,has-many,Ruby On Rails,Ruby On Rails 3,Activerecord,Ruby On Rails 3.1,Has Many,我试图仅显示和捕获*has_many*关系中的最新项目。基本上,我想根据一些条件找到一个存在于*has_many*关系中的单个对象,并将其与记录一起显示 我定义的类关系如下: class Member < ActiveRecord::Base has_many :member_status_histories has_many :member_statuses, :through => :member_status_history end class MemberS

我试图仅显示和捕获*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中的member_status_历史记录中

我已经尝试过几种方法,但尽管我对RoR还不熟悉,但我不确定使用什么方法来实现这一点。似乎有几种方法可以让它发挥作用,但我还没能让它们中的任何一种完全发挥作用

对我来说最有意义的想法是使用虚拟属性。虚拟属性将提供我想要显示的成员状态历史记录对象,然后当用户提交更新的成员和成员状态历史记录时,我可以在虚拟属性上运行一些业务逻辑,使用before_save并根据需要更新*member_status_histories*字段


再一次,我无法找到任何工作方法,所以我愿意接受关于如何完成这项工作的建议。谢谢

我会抛弃多成员历史的概念。它会很快变得非常复杂,幸运的是,你已经有了一块宝石,可以做你想做的一切。在member_status_history.rb中:

class MemberStatusHistory < ActiveRecord::Base
    has_paper_trail
    belongs_to :member_status
    belongs_to :member
    has_one :timespan
end
然后您可以执行@member.member\u status\u history.previous\u version以查看当前member\u status\u history之前的版本,并且当前版本始终是@member.member\u status\u history上的实时版本。这应该允许您始终查看最新的成员状态历史记录,同时始终能够从纸质版本表中查看任意数量的剩余成员状态历史记录


有关这一切如何运作的更多信息,请查看。

这正是我要寻找的!谢谢