2013-05-07 104 views
1

我正在使用鋼軌版本3.2.10
我想將具有許多屬性的模型實例變量從一個動作傳遞到另一個動作在不同的控制器中。在redirect_to rails中將模型實例變量從一個控制器傳遞給另一個控制器?

我已經嘗試了很多東西,但沒有得到解決方案。

第一控制器方法

def create 
if current_user 
    auth = request.env["omniauth.auth"] 
    @applicant = Applicant.new 
    if (auth['provider'] == "linkedin") 
    puts auth.info.image 
    linkedinProfileImport(auth) 
    @applcant.first_name = auth.info.first_name 
    @applcant.second_name = auth.info.last_name 

    redirect_to controller => 'job_applicants', :action => 'newProfile' , :id => params[:id] 
    end 

第二控制器的方法

def newProfile 
@job = Job.find_by_id(params[:id]) 
puts @job.id 
@applicant = Applicant.new 
@applicant = @applicant 

我必須從第一控制器訪問@申請人變量到第二控制器的方法。
幫我在這請
在此先感謝

回答

4

你就不能這樣做......你必須在你的數據庫的對象存儲在第一個動作,然後在第二個檢索。

使用redirect_to,您可以像在URL中傳遞參數那樣傳遞參數,而不是完整的對象。在這裏,您可以將保存的對象ID傳遞給redirect_to。

+0

,但我沒有保存在數據庫中。我已經使用omniauth進行身份驗證和收集詳細信息,我存儲在@applicant中,我必須在不同的控制器中使用它顯示帶有預填充值的表單。所以我不得不在那裏存取那些價值。請給我另一種方式。 – 2013-05-07 16:40:26

0

您應該將很多這種邏輯從控制器移到模型中。

所以,我想有一個模型方法:

def create #in the controller 
    if current_user 
    auth = request.env["omniauth.auth"] 
    @applicant = Applicant.create_from_omniauth_hash(auth) 

    redirect_to controller => 'job_applicants', :action => 'newProfile' , :id => params[:id] 
end 



class Applicant < ActiveRecord::Base 
    def self.create_from_omniauth_hash(auth) 
    applicant = Applicant.new 
    if (auth['provider'] == "linkedin") 
     puts auth.info.image 
     linkedinProfileImport(auth) 
     applicant.first_name = auth.info.first_name 
     applicant.second_name = auth.info.last_name 
    end 
    create_new_profile(applicant) 
    applicant.save! 
    end 

    def create_new_profile(applicant) 
    applicant.job = "job" 
    end 
end 
+0

但通過這樣做,如何訪問變量? – 2013-05-07 16:41:30

+0

你可以從控制器的'create'方法調用這個方法,然後你重定向到你需要的頁面。我會稍微編輯一下這個問題,告訴你它是如何工作的。 – Solomon 2013-05-07 16:43:38

+0

好的。做到這一點。它會幫助我很多 – 2013-05-07 16:47:06

相關問題