after_create url_helpers在User模型中不起作用(使用Devise)

时间:2011-01-20 20:13:50

标签: ruby-on-rails devise

在after_create回调期间,url_helpers似乎在我的User模型中不起作用。这是错误...

Devise / registrationsController中的NameError #create

未定义的局部变量或方法`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_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 

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:2)

Url助手无法在AR模型中完全停止,在回调中无所谓。这是设计 - 您的模型层应该能够在Web服务器的上下文之外运行。

您可以通过将Web堆栈的位包含到模型中来解决问题,并且有几个问题可以告诉您如何...此问题的相关列表中的第一个问题是:

Can Rails Routing Helpers (i.e. mymodel_path(model)) be Used in Models?