开发者

after_create url_helpers not working in User model (with Devise)

开发者 https://www.devze.com 2023-02-06 01:24 出处:网络
The url_helpers do not seem to be working in my User model during an after_create callback.Here is the error...

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?

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号