I used devise gem for authentication in my rails application. I want to get certain information about current user on after_create callback. How is it possible?
My model code is:
class Department
field :name
after_create :create_news
private
def create_news
@user = current_user
end
end
But when I create new department I get following error.
undefined local variable or method `current_user' for #<Department:0x00000005b51648>
What is the best way for this?
current_user is only available to controller and views. If your
department
model is connected touser
model,you should addbelong_to
association and can do something likeAccess control in rails is done at the controller level, not the model level. As a result, rails provides no mechanism for accessing the current user, cookies, etcetera, from inside model code. You can ferry the data into the model by parameters to methods, if you choose. However, that would be ignoring the design decisions of some of the best programmers in the industry, so I think it's probably not a good choice.
In other words, don't do what you're trying to do. Put the knowledge of how to do things in your model, but put controls around who can do them in the controller.
On the other hand, if you're trying to store the current user for some reason, then you should do that by some sort of association (or nested document, since you're using mongo). In that case, don't use
current_user
inside the model, but rather make anattr_accessor
on user, set the user on the instance of your model to thecurrent_user
in the controller, and then save it how you need to in your callback.