Validations: Controller Filters vs. Model validate()

Lately I have come to somewhat of a dilemma. Consider I have a Forum
model. A Forum belongs_to a Group, but not any one particular User. To
create a Forum, however, the Membership association between the User
and the Group must be at an admin-level (integer value is 3). In the
controller I use the before_filter called ‘require_group_admin’ to
ensure proper permissions. The problem is that in the Forum validate()
method, I cannot make sure that the user creating it has sufficient
permissions without adding a user_id foreign key.

Consider an opposite example. A Group also has_many Events. To create
an Event, just like a Forum, the User’s Membership association with
the Group (:through) must be 3. As such, I use the same before_filter
in the controller as in the previous example. However, this time in
the validate() method of the Event class I can choose to make sure the
User has proper permissions because it belongs_to a User. This would
have to be done via something like:

“self.user.membership.find_by_group_id(group).status == 3”

Something very similar is required in the before_filter
‘require_group_admin’ to make sure the User can do that. I was told
that before_filters should be used to protect the viewing of files;
models to protect the actual data itself. So in theory I should be
using both. But I am repeating myself, thereby violating the infamous
DRY. And add to that the fact that I am doing two extra queries, if
not more (“self.user.membership” == find user, find membership by

Am I missing something here? Am I supposed to use both validations? If
so, what about in the first case? It doesn’t make sense for a single
forum to “belong” to a user! Responses greatly appreciated!

  • Michael