Conditional Validation and restful_authentication

I’m using the restful_authentication plugin/generator to user access
control in an app I’m working on. I added on to the user model for
things like male/female. I have two methods on the user model male?
and female?. I have two fields in a model that has a one-to-many
relationship with the User model that are only needed if the
current_user.female? is true. However I’m not sure how I would call
the method from a model that is not the User model. Can anyone offer
some advice?

Thanks,

Tim K.

try current_user.male? and current_user.female?

check out lib/authenticated_system.rb in your project. this will give
you some insight on how to work with logged in users.

good luck.
mike

sorry, I misread your question…

has_many :ovaries, :if => :female?

^ Something like this?


Ryan B.

Sorta Ryan… more like

validates_presence_of :ovaries, :if => :female?

However ovaries is in one model and :female? is a method on the user
model.

No problem Michael, yeah - I’ve tried that… The only way I can
think of doing it is assigning an instance variable that I can check
from the model. But that just doesn’t seem right. Anyone else have
any thoughts?

Do you have a relationship (belongs_to, has_many) set up on these
other models with your User model?

Could you pass a value into a method on these other classes and then
use a dynamic finder on User?

OtherClass

def my_method name
u = User.find_by_username name
end

It’s tough to figure it out without knowing how these other models are
set up.

On Dec 21, 2007 12:57 PM, blaine [email protected] wrote:

^ Something like this?


Ryan B.http://www.frozenplague.net

And precisely WHAT is the problem with doing that? If ovaries is a model
then it will work.


Ryan B.

validates_presence_of :field1, :field2, :if => :female?


Ryan B.

validates_presence_of :wrist_inches, :if => :female?

Results in:

undefined method `female?’ for #Measurement:0x1123378

Michael, there is definitely a relationship. Here let me give you
some better details. I’m calculating lean body mass which is
different for both men and women. I have the User model that
restful_authentication generates with a few added fields one of which
is User.sex, and a has_many :measurements relationship. I then have
two methods in the generated User model as such:

def male?
self.sex == “male”
end

def female?
self.sex == “female”
end

I have a Measurements model which has a relationship with the user
using belongs_to :user. I have two fields that are I want to validate
the presence of only in the case were current_user.female? is true.

Hope that clears it up a little more.

Tim

Remember female? is a method of a different model. I think the issue
here is really how do I call the current_user object that restful_auth
sets as a local variable from other models. Because logic tells me I
could create a method on the the Measurements model that does:

def current_user_is_female
User.find_by_id(current_user.id).female?
end

and then doing:

validates_presence_of :wrist_inches, :if => :current_user_is_female

But doing that of course leaves me with a “undefined local variable or
method `current_user’ for #Measurement:0x1736bac

Tim

Awesome Ryan - that was exactly it!

I needed to make a another definition for female? – Perfect! :smiley:

You rock man!

Tim

And a measurement belongs to a user?

class Measurement < ActiveRecord::Base
validates_presence_of :wrist_inches, :if => “female”
def female?
user.female?
end
end

Here I was thinking you were putting the VPO in the User model. Silly
me.

On Dec 21, 2007 1:24 PM, blaine [email protected] wrote:


Ryan B.http://www.frozenplague.net


Ryan B.