如何为具有两个belongs_to关系的模型建立关联?

时间:2011-03-13 08:03:01

标签: ruby-on-rails ruby-on-rails-3 associations has-many belongs-to

我正在使用以下模型函数构建应用程序

  • 群组有很多用户
  • 群组有多个费用(每个费用都有:name,:total,:added_by_user_id字段)
  • 费用有很多项(组中每个用户1个)
  • Owings有:amount和a:user_id,用于引用欠款的用户

到目前为止,我已将模型设置如下:

# user.rb
class User < ActiveRecord::Base
  attr_accessible :first_name, :last_name, :email, :password
  has_many :memberships, :foreign_key => "member_id", :dependent => :destroy
  has_many :groups, :through => :memberships
  has_many :owings
end

# group.rb
class Group < ActiveRecord::Base
  attr_accessible :name
  has_many :memberships, :dependent => :destroy
  has_many :members, :through => :memberships
  has_many :expenses
end

# expense.rb
class Expense < ActiveRecord::Base
  attr_accessible :total_dollars, :name, :owings_attributes, :added_by_user_id      
  belongs_to :group, :inverse_of  => :expense
  has_many :owings, :dependent => :destroy
end

# owing.rb
class Owing < ActiveRecord::Base
  attr_accessible :amount_dollars, :user_id

  belongs_to :expense, :inverse_of => :owings
  belongs_to :user, :inverse_of => :owings
end

# NB - have left off memberships class (and some attributes) for simplicity

要创建费用,我使用@ group.expenses.build(params [:expenses]),其中params来自嵌套模型表单,其中包含需要创建的所有权的属性。参数包括该费用的每个'欠款'实例的'user_id'。

我有两个问题:

  • 首先 - 我已经在owings模型中访问了'user_id',这意味着恶意用户可以更改谁欠付费用(我认为?)。不过,我不知道如何解决这个问题,因为用户在填写费用/欠款表格时需要查看该组其他所有成员的姓名。
  • 其次 - 我还在费用模型中访问了“added_by_user_id” - 我也不希望恶意用户能够更改此内容,因为此user_id具有特殊的编辑/删除费用。是否有一些聪明的方法可以将'belongs_to'作为一个用户和一个组,并在创建WITHOUT时设置这两个关联,并且必须创建一个可访问的属性?如果有帮助,'added_by_user_id'始终可以设置为current_user。

有什么想法吗?很可能我在这里遗漏了一些相当基本的东西。

提前致谢!

PS。长时间听众,第一次来电。感谢大家教我迄今为止在轨道上的红宝石;这个网站是一个令人难以置信的资源!

1 个答案:

答案 0 :(得分:2)

您是否考虑过动态设置它们?

dynamic attr-accessible railscast