我正在使用rails版本3.2.10
我试图传递一个模型实例变量,其中包含许多属性,从一个动作到另一个动作在不同的控制器中。
我尝试了很多东西,但没有得到解决方案。
第一个控制器方法
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
结束
我必须从第一个控制器访问@ applicant变量到第二个控制器方法 请帮助我 提前致谢
答案 0 :(得分:4)
你不能这样做......你必须在第一个动作中将对象存储在DB中,然后在第二个动作中检索它。
使用redirect_to,您可以像在URL中那样传递参数,例如,不是完整的对象。在这里,您将在redirect_to中传递保存的对象ID。
答案 1 :(得分: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