I am using Ruby on Rails 3.0.7 and I would like to find some records at run time for validation purposes but passing\setting a value for that finder method. That is, in a my class I have the following:
class Group < < ActiveRecord::Base
validates :relation_id,
:presence => true,
:inclusion => {
:in => ... # Read below for more information about
}
end
If I set :in to be
:in => User.find(1).group_ids
it works, but I would like to set “some-dynamic-things” for the finder method instead of the 1 value stated below in the example. That is, I would like to do something like the following in order to pass to the model a <test_value> in someway:
class Group < < ActiveRecord::Base
validates :relation_id,
:presence => true,
:inclusion => {
:in => User.find(<test_value>).group_ids
}
end
Is it possible? If so, how can I pass the value to the constant?
P.S.: Just to know, I am trying to make that in order to move some logic from the controller to the model.
I’m inferring that what you’re trying to do is enforce something like “Only users who are members of a group can save it.” If that’s the case, you have behavior that should stay in the controller.
Your model doesn’t have access to the current session, and adding this logic will prevent you from using your model for other things in the future. For example, you’d never be able to save a group from a batch or maintenance job that wasn’t associated with a user.
If you really want to do this you could put a
current_userclass level variable in theUserobject and set it in abefore_filter…