Я создаю приложение со следующими функциями модели
- В группах много пользователей
- Группы имеют много расходов (у каждого из них есть поля: name,: total,: Added_by_user_id)
- Расходы имеют много обязательств (по 1 на каждого пользователя в группе)
- Владельцы имеют: 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 [: расходы]), где параметры берутся из формы вложенной модели, которая включает атрибуты для задолженностей, которые необходимо создать. Параметры включают в себя «user_id» для каждого «обязательного» экземпляра для этих расходов.
У меня есть две проблемы:
- Во-первых, я сделал user_id доступным в модели owings, что означает, что злонамеренный пользователь может поменять, кому должен за счет (я думаю?). Однако я не знаю, как обойти это, потому что пользователю необходимо видеть имена всех других членов группы, когда они заполняют форму расходов / задолженностей.
- Во-вторых, я также сделал доступным "add_by_user_id" в модели расходов - я также не хотел бы, чтобы злоумышленники могли это изменить, поскольку этот user_id имеет специальные правки редактирования / удаления для расходов. Есть ли какой-нибудь умный способ сделать расход принадлежащим пользователю И группе и установить обе эти ассоциации при создании БЕЗ создания какого-либо доступного атрибута? Если это помогает, то для add_by_user_id всегда можно установить значение current_user.
Есть идеи? Очень возможно, что я упускаю что-то довольно фундаментальное здесь.
Заранее спасибо!
PS. Долгое время слушатель, впервые звонящий. Спасибо всем за то, что научили меня рубину на рельсах на сегодняшний день этот сайт невероятный ресурс!