1

我想弄清楚我的方法是否正确。我有一个用户模型和一个补偿模型。我需要允许应用程序管理员为每个用户记录分配补偿。这种补偿可能会随着时间的推移而变化,我想跟踪这些变化。经过一番研究,我认为has_many => :through 是解决此问题的方法,它使用称为 Payments 的第三个模型加入其他两个模型,并且在该模型内部有 user_id 和补偿 ID。我有以下设置:

class User < ActiveRecord::Base

has_many :payments
has_many :compensations, :through => :payments


class Compensation < ActiveRecord::Base

has_many :payments
has_many :users, :through => :payments

class Payment < ActiveRecord::Base

has_many :Users
has_many :compensations

我的第一个问题是:我是否正确,这将是了解我要达到的目标的最佳方法吗?我的第二个问题是在表单中包含一个下拉字段(从补偿表中汇集)以填充付款表的最简单方法是什么?不幸的是,我评论过的大多数关于has_many :through的网络讨论都集中在模型而不是视图上。

任何援助将不胜感激。

4

4 回答 4

1
class User < ActiveRecord::Base
 has_many :payments
 has_many :compensations, :through => :payments
end

class Compensation < ActiveRecord::Base
  has_many :payments
  has_many :users, :through => :payments
end

class Payment < ActiveRecord::Base
  belongs_to :user
  belongs_to :compensation
end

试试这个可能对你有帮助。更多信息。看这个视频 - has_many->through

于 2012-09-27T05:22:31.093 回答
0

目前还不清楚你的目标是什么。为什么用户会有很多补偿?为什么补偿会有很多用户,任何特定的补偿不会是针对特定用户的补偿?我也不确定您在第二个问题中所说的是什么形式。

也就是说,假设您想要一些与上面的代码类似的东西,您只需要:

class User < ActiveRecord::Base
  has_and_belongs_to_many :compensations
end

class Compensation < ActiveRecord::Base
  has_and_belongs_to_many :users
end

至于下拉菜单,请查看 Railsselect助手。抱歉,我不能更具体,再说一次,我不确定您要做什么。

于 2012-09-27T03:20:43.003 回答
0

您的第一个问题是:我是否正确,这将是了解我要达到的目标的最佳方法吗?Ans:这是一个很好的方法,但您可以在那里“多态关联”以获得更具体的解决方案。您的第二个问题是在表单中包含一个下拉字段(从补偿表中汇集)以填充付款表的最简单方法是什么?

第二个问题不是很清楚。你想显示一些属性的值吗?

如果是这样,请按照我的这个例子。我想它会帮助你。

contact.select :contactable, @member.contacts.map {|r| [r.first_name,r.id] }

于 2012-09-28T06:49:28.520 回答
0

我想通了——但朝另一个方向发展——现在我决定不再跟踪历史,并使用 collection_select 创建了一个动态下拉列表——

于 2012-09-28T04:08:05.243 回答