2

我正在构建具有以下模型功能的应用程序

  • 组有很多用户
  • 组有许多费用(每个费用都有一个:name,:total,:add_by_user_id 字段)
  • 费用有很多欠款(组中每个用户1个)
  • Owings 有一个 :amount 和一个 :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 来自嵌套模型表单,其中包含需要创建的欠款属性。参数包括该费用的每个 'owing' 实例的 'user_id'。

我有两个担忧:

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

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

提前致谢!

PS。长期聆听者,第一次来电者。感谢大家教我 ruby​​ on rails 至今;这个网站是一个令人难以置信的资源!

4

1 回答 1

2

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

动态属性可访问的 railscast

于 2011-03-13T08:39:15.277 回答