Ruby on rails Rails在成功保存对象时调用控制器操作

Ruby on rails Rails在成功保存对象时调用控制器操作,ruby-on-rails,ruby-on-rails-4,devise,salesforce,Ruby On Rails,Ruby On Rails 4,Devise,Salesforce,我有一个用户注册表生成的设计。提交表单并将用户对象保存到数据库时,我希望创建并保存另一个对象,该对象在单独的控制器(leads_controller.rb)中生成,并传递刚刚保存的用户对象。注册表格收集电子邮件、密码和密码确认 保存用户后,我需要将该用户对象传递给leads_控制器以调用新操作和创建操作 leads\u controller.rb class LeadsController < ApplicationController include Databasedotcom

我有一个用户注册表生成的设计。提交表单并将用户对象保存到数据库时,我希望创建并保存另一个对象,该对象在单独的控制器(leads_controller.rb)中生成,并传递刚刚保存的用户对象。注册表格收集电子邮件、密码和密码确认

保存用户后,我需要将该用户对象传递给leads_控制器以调用新操作和创建操作

leads\u controller.rb

class LeadsController < ApplicationController
    include Databasedotcom::Rails::Controller

    def new
      @lead = Lead.new
    end 

    def create
      lead = Lead.new(params[:lead])
      lead.Email = @user.email
    end
end
  # User route
  devise_for :users
  devise_for :lenders, skip: :sessions, :controllers => {:registrations => "lenders/registrations"}
  devise_for :businesses, skip: :sessions

  root :to => 'business_account#dashboard', :constraints => lambda { |request| request.env['warden'].user.class.name == 'Business' }, :as => "business_root"
  root :to => 'lender_account#dashboard', :constraints => lambda { |request| request.env['warden'].user.class.name == 'Lender' }, :as => "lender_root"

  # Leads route
  resources :leads
class Lenders::RegistrationsController < Devise::RegistrationsController
  before_filter :update_sanitized_params

  def new
    super
  end

  def create
    super
  end

  def update
    super
  end

  private

    def update_sanitized_params
       devise_parameter_sanitizer.for(:sign_up) {|u| u.permit(:email, :password, :password_confirmation, :type)}
    end
end 
# User route
devise_for :users, :controllers => { :registrations => "registrations" }
devise_for :businesses, skip: :sessions

root :to => 'business_account#dashboard', :constraints => lambda { |request| request.env['warden'].user.class.name == 'Business' }, :as => "business_root"
root :to => 'lender_account#dashboard', :constraints => lambda { |request| request.env['warden'].user.class.name == 'Lender' }, :as => "lender_root"

# Leads route
resources :leads
def after_sign_up_path_for(resource)
  redirect_to new_lead_path
  #after_sign_in_path_for(resource)
end
注册\u controller.rb

class LeadsController < ApplicationController
    include Databasedotcom::Rails::Controller

    def new
      @lead = Lead.new
    end 

    def create
      lead = Lead.new(params[:lead])
      lead.Email = @user.email
    end
end
  # User route
  devise_for :users
  devise_for :lenders, skip: :sessions, :controllers => {:registrations => "lenders/registrations"}
  devise_for :businesses, skip: :sessions

  root :to => 'business_account#dashboard', :constraints => lambda { |request| request.env['warden'].user.class.name == 'Business' }, :as => "business_root"
  root :to => 'lender_account#dashboard', :constraints => lambda { |request| request.env['warden'].user.class.name == 'Lender' }, :as => "lender_root"

  # Leads route
  resources :leads
class Lenders::RegistrationsController < Devise::RegistrationsController
  before_filter :update_sanitized_params

  def new
    super
  end

  def create
    super
  end

  def update
    super
  end

  private

    def update_sanitized_params
       devise_parameter_sanitizer.for(:sign_up) {|u| u.permit(:email, :password, :password_confirmation, :type)}
    end
end 
# User route
devise_for :users, :controllers => { :registrations => "registrations" }
devise_for :businesses, skip: :sessions

root :to => 'business_account#dashboard', :constraints => lambda { |request| request.env['warden'].user.class.name == 'Business' }, :as => "business_root"
root :to => 'lender_account#dashboard', :constraints => lambda { |request| request.env['warden'].user.class.name == 'Lender' }, :as => "lender_root"

# Leads route
resources :leads
def after_sign_up_path_for(resource)
  redirect_to new_lead_path
  #after_sign_in_path_for(resource)
end
类别贷方::注册控制器<设计::注册控制器
过滤前:更新已消毒的参数
def新
超级的
结束
def创建
超级的
结束
def更新
超级的
结束
私有的
def更新\u消毒\u参数
为(:注册){u许可证(:电子邮件,:密码,:密码确认,:键入)}
结束
结束
我是否可以在我的registrations\u controller.rb中设置一个操作,将用户对象传递给leads\u controller.rb?

从中复制内容

https://github.com/plataformatec/devise/blob/master/app/controllers/devise/registrations_controller.rb
并粘贴到注册\u controller.rb中

class LeadsController < ApplicationController
    include Databasedotcom::Rails::Controller

    def new
      @lead = Lead.new
    end 

    def create
      lead = Lead.new(params[:lead])
      lead.Email = @user.email
    end
end
  # User route
  devise_for :users
  devise_for :lenders, skip: :sessions, :controllers => {:registrations => "lenders/registrations"}
  devise_for :businesses, skip: :sessions

  root :to => 'business_account#dashboard', :constraints => lambda { |request| request.env['warden'].user.class.name == 'Business' }, :as => "business_root"
  root :to => 'lender_account#dashboard', :constraints => lambda { |request| request.env['warden'].user.class.name == 'Lender' }, :as => "lender_root"

  # Leads route
  resources :leads
class Lenders::RegistrationsController < Devise::RegistrationsController
  before_filter :update_sanitized_params

  def new
    super
  end

  def create
    super
  end

  def update
    super
  end

  private

    def update_sanitized_params
       devise_parameter_sanitizer.for(:sign_up) {|u| u.permit(:email, :password, :password_confirmation, :type)}
    end
end 
# User route
devise_for :users, :controllers => { :registrations => "registrations" }
devise_for :businesses, skip: :sessions

root :to => 'business_account#dashboard', :constraints => lambda { |request| request.env['warden'].user.class.name == 'Business' }, :as => "business_root"
root :to => 'lender_account#dashboard', :constraints => lambda { |request| request.env['warden'].user.class.name == 'Lender' }, :as => "lender_root"

# Leads route
resources :leads
def after_sign_up_path_for(resource)
  redirect_to new_lead_path
  #after_sign_in_path_for(resource)
end
更改路由。rb

class LeadsController < ApplicationController
    include Databasedotcom::Rails::Controller

    def new
      @lead = Lead.new
    end 

    def create
      lead = Lead.new(params[:lead])
      lead.Email = @user.email
    end
end
  # User route
  devise_for :users
  devise_for :lenders, skip: :sessions, :controllers => {:registrations => "lenders/registrations"}
  devise_for :businesses, skip: :sessions

  root :to => 'business_account#dashboard', :constraints => lambda { |request| request.env['warden'].user.class.name == 'Business' }, :as => "business_root"
  root :to => 'lender_account#dashboard', :constraints => lambda { |request| request.env['warden'].user.class.name == 'Lender' }, :as => "lender_root"

  # Leads route
  resources :leads
class Lenders::RegistrationsController < Devise::RegistrationsController
  before_filter :update_sanitized_params

  def new
    super
  end

  def create
    super
  end

  def update
    super
  end

  private

    def update_sanitized_params
       devise_parameter_sanitizer.for(:sign_up) {|u| u.permit(:email, :password, :password_confirmation, :type)}
    end
end 
# User route
devise_for :users, :controllers => { :registrations => "registrations" }
devise_for :businesses, skip: :sessions

root :to => 'business_account#dashboard', :constraints => lambda { |request| request.env['warden'].user.class.name == 'Business' }, :as => "business_root"
root :to => 'lender_account#dashboard', :constraints => lambda { |request| request.env['warden'].user.class.name == 'Lender' }, :as => "lender_root"

# Leads route
resources :leads
def after_sign_up_path_for(resource)
  redirect_to new_lead_path
  #after_sign_in_path_for(resource)
end
在注册控制器.rb中,将创建操作更改为

注意:-另请参见创建操作中的更改

def create
build_resource(sign_up_params)

resource_saved = resource.save
yield resource if block_given?
if resource_saved
  if resource.active_for_authentication?
    set_flash_message :notice, :signed_up if is_flashing_format?
    sign_up(resource_name, resource)
    respond_with resource, location: after_sign_up_path_for(resource)
  else
    set_flash_message :notice, :"signed_up_but_#{resource.inactive_message}" if is_flashing_format?
    expire_data_after_sign_in!
    respond_with resource, location: after_inactive_sign_up_path_for(resource)
  end
else
  clean_up_passwords resource
  respond_with resource
end
end
在注册控制器.rb中

class LeadsController < ApplicationController
    include Databasedotcom::Rails::Controller

    def new
      @lead = Lead.new
    end 

    def create
      lead = Lead.new(params[:lead])
      lead.Email = @user.email
    end
end
  # User route
  devise_for :users
  devise_for :lenders, skip: :sessions, :controllers => {:registrations => "lenders/registrations"}
  devise_for :businesses, skip: :sessions

  root :to => 'business_account#dashboard', :constraints => lambda { |request| request.env['warden'].user.class.name == 'Business' }, :as => "business_root"
  root :to => 'lender_account#dashboard', :constraints => lambda { |request| request.env['warden'].user.class.name == 'Lender' }, :as => "lender_root"

  # Leads route
  resources :leads
class Lenders::RegistrationsController < Devise::RegistrationsController
  before_filter :update_sanitized_params

  def new
    super
  end

  def create
    super
  end

  def update
    super
  end

  private

    def update_sanitized_params
       devise_parameter_sanitizer.for(:sign_up) {|u| u.permit(:email, :password, :password_confirmation, :type)}
    end
end 
# User route
devise_for :users, :controllers => { :registrations => "registrations" }
devise_for :businesses, skip: :sessions

root :to => 'business_account#dashboard', :constraints => lambda { |request| request.env['warden'].user.class.name == 'Business' }, :as => "business_root"
root :to => 'lender_account#dashboard', :constraints => lambda { |request| request.env['warden'].user.class.name == 'Lender' }, :as => "lender_root"

# Leads route
resources :leads
def after_sign_up_path_for(resource)
  redirect_to new_lead_path
  #after_sign_in_path_for(resource)
end
设计并提供一个助手方法当前用户,通过该方法,您可以在leads\u controller.rb以及视图中了解用户对象

class LeadsController < ApplicationController
  include Databasedotcom::Rails::Controller

  def new
    @lead = Lead.new
  end 

  def create
    lead = Lead.new(params[:lead])
    lead.email = current_user.email
  end
end
class LeadsController
您是否使用贷方或用户注册控制器进行签名up@ShamsulHaque我正在用贷方注册控制器(如上所示)覆盖默认用户注册控制器。我这样做是为了能够以某种方式调用lead控制器并将用户传递给它。我只是不知道该怎么做。你有没有检查过它是否会传到贷方注册管理员或管理员那里not@ShamsulHaque是的,我已经测试了贷方注册\u控制器,在创建对象时将其放入我的终端。使用当前\u用户是一个好主意。但我仍然不知道如何执行Lead#U controller#注册后新增#U controller#创建完成?这太棒了。成功注册后,它现在将我发送到leads/new。同时,我需要弄清楚如何将其重定向到其他控制器,但一旦我将当前的用户信息发布到salesforce数据库,我会将此答案标记为正确。非常感谢。我现在遇到了一些问题,因为它们都联系在一起了。用户注册后,将被定向到/leads/new,并作为潜在客户推送到salesforce。但是,当它们被推到/leads/new时,当我将电子邮件设置为current_user.email时,我会得到“nil:NilClass的未定义方法`email'”?我不确定是否正在进行会话以允许从当前用户中提取电子邮件?由于某些原因,我无法在当前用户注册后立即访问其会话数据。如果我通过登录页面登录并导航到leads/new并提交表单,则接受我当前的_user.email数据没有问题