Как установить ассоциации для модели с двумя отношениями own_to? - PullRequest
2 голосов
/ 13 марта 2011

Я создаю приложение со следующими функциями модели

  • В группах много пользователей
  • Группы имеют много расходов (у каждого из них есть поля: 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. Долгое время слушатель, впервые звонящий. Спасибо всем за то, что научили меня рубину на рельсах на сегодняшний день этот сайт невероятный ресурс!

1 Ответ

2 голосов
/ 13 марта 2011

Задумывались ли вы о том, чтобы установить их динамически?

динамический доступный через attr railscast

...