The url_helpers do not seem to be working in my User model during an after_create callback. Here is the error...
NameError in Devise/registrationsController#create
undefined local variable or method `controller' for...
class User < ActiveRecord::Base
include ActionView::Helpers::UrlHelper
include Rails.application.routes.url_helpers
# Include default devise modules. Others available are:
# :token_authenticatable, :lockable and :timeoutable
devise :invitable, :database_authenticatable, :registerable, :confirmable,
:recoverable, :rememberable, :trackable, :validatable
...
# Callbacks
after_create :initialization
def initialization
if self.temp_org_id.blank?
self.update_attributes(:email_messages => true, :email_requests => true)
self.is_travel_planner ? buyer = true : buyer = false
##### THIS IS WHERE IT BREAKS##########################
step_1 = link_to('Setup your personal profile', edit_user_path(self))
step_2 = link_to('Setup/update your company profile', '/organizations/new?user_id=' + self.id.to_s)
if buyer == true
step_3 = link_to "Find potential suppliers by name, location, person, and more!", "/organizations/new?user_id=" + self.id.to_s
else
step_3 = link_to "Make Connections with qualified buyers!", "/organizations/new?user_id=" + self.id.to_s
end
name = self.name_first
type = 'suppliers'
content = "<p>Welcome #{name},</p>
<p>The iTourSmart community is built upon a powerful web-based tool that allows you to find and connect with #{type} like never before. Building your business with iTourSmart is as easy as 1-2-3!</p>
<h4>Step 1: Setup your personal profile</h4>
<h4>Step 2: #{step_2}</h4>
<h4>Step 3: #{step开发者_如何学JAVA_3}</h4>
<p>=Of course, you can simply close this window and look around right now. This message is stored in your message center and can be accessed at any time.</p>"
new_note = self.notes.create(:is_fancybox_autoload => true, :is_sysmessage => true, :subject => "Setup your brand", :body => content)
else
self.roles.create(:user_id => self.id, :organization_id => self.temp_org_id)
self.update_attributes(:temp_org_id => nil, :email_messages => true, :email_requests => true)
end
end
end
Any help is greatly appreciated!
Url helpers don't work in AR models full stop, nevermind in callbacks. This is by design- your model layer should be able to operate outside of the context of a web server.
You can fudge the issue by including bits of the web stack in to the model and there are several questions on SO that will tell you how.. The first one in the related list for this question is:
Can Rails Routing Helpers (i.e. mymodel_path(model)) be Used in Models?
精彩评论