What does self.get do?

Hey all,

I’m looking at a piece of code developed by an experienced Rails
developer:

def create
@user = User.authenticate!(params[:email], params[:password])

@deployment = Deployment.find_by_name(params[:deployment_name])

end

In that third line, he calls a class method find_by_name on the
Deployment class. So naturally I look at Deployment.rb where the class
is initialized. But there is no find_by_name method. What I see is this:

validates_presence_of :name

def self.get(name)
find_by_name!(name)
end

So why does this not return an undefined method error? There’s no setter
or getter (attr_accessor) for find_by_name so it has no definition
anywhere. Second point is find_by_name! is not declared anywhere either
so we pass the name local variable into it, but it’s not defined
anywhere. Anyone understand what’s going on here? Thanks for response.

end

So why does this not return an undefined method error? There’s no setter
or getter (attr_accessor) for find_by_name so it has no definition
anywhere. Second point is find_by_name! is not declared anywhere either
so we pass the name local variable into it, but it’s not defined
anywhere. Anyone understand what’s going on here? Thanks for response.

ActiveRecord (or Model, not sure which in Rails 3) has some dynamic
finder methods. If “name” is a field for that model then “find_by_name”
gets caught and converted into the appropriate method.

See #2 Dynamic find_by Methods - RailsCasts for more.
Can’t find a quick link to the right section of the docs, but it’s
there…

Philip H. wrote in post #977290:

So why does this not return an undefined method error? There’s no setter
or getter (attr_accessor) for find_by_name so it has no definition
anywhere. Second point is find_by_name! is not declared anywhere either
so we pass the name local variable into it, but it’s not defined
anywhere. Anyone understand what’s going on here? Thanks for response.

ActiveRecord (or Model, not sure which in Rails 3) has some dynamic
finder methods. If “name” is a field for that model then “find_by_name”
gets caught and converted into the appropriate method.

As far as I can tell the dynamic finders are still implemented in
ActiveRecord not ActiveModel. I’m not 100% sure of this however. Maybe
because other implementers of ActiveModel may need to do their own
custom behavior for this (if they want to behavior at all).

See #2 Dynamic find_by Methods - RailsCasts for more.
Can’t find a quick link to the right section of the docs, but it’s
there…

There’s good docs on this in the Rails guides here: