我正在构建具有以下模型功能的应用程序
- 组有很多用户
- 组有许多费用(每个费用都有一个: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 至今;这个网站是一个令人难以置信的资源!