如何通过视图导轨将信息从一个控制器传递到另一个控制器

问题描述:

我正在处理预定项目,并且在登录后我想通过主页将当前用户信息从Sessions控制器传递给预约控制器。我怎样才能做到这一点?我一直在关注Michael Hartl的Rails教程。下面是我在的会话控制器如何通过视图导轨将信息从一个控制器传递到另一个控制器

render home_path :local_variables[:id => user_id] 

创建栏目,并在home_path(用户#家)曾试图

<%= link_to new_reservation_path(:user_id => :id) %> 

,但它让我看到一个未定义的方法错误。我的预订模型有一个user_id列。我对此事感到困惑。我该怎么办?

render home_path :local_variables[:id => user_id] 

似乎不可思议我通过当地人这样(甚至不知道这是否是可能的,没见过当地人渲染视图/谐音之外使用)。

我认为最好的办法是不是重定向,并设置在会话的用户,一旦他们成功地被记录,所以在你的登录操作:

user = User.find_by_email(params[:user][:email]) # or however you are finding the person trying to login 

session[:user] = user 
redirect_to home_path 

然后在users#home

@user = session[:user] 

最后在视图中:

<%= link_to new_reservation_path(:user_id => @user.id) %> 

编辑

事实上,可能不是一个好主意来存储,而不是

session[:user] = user 

在会话中的对象,你可以尝试:

session[:user_id] = user.id 

,然后找到用户:

@user = User.find(session[:user_id]) 

如果你仍然得到一个未定义的错误,那么这可能是因为用户是零(除非User模型实际上没有id属性,这会很奇怪),所以登录部分可能存在问题,如果不知道它是什么样子,很难说。

如果您需要在每一页上登录的用户,你可以抽象出功能到应用程序控制器:

before_filter :check_user 

def check_user 
    @user = User.find(session[:user_id]) if session[:user_id] 
end 

然后,您可以随时随地在您的应用程序使用@user实例变量。

+0

它仍然无法正常工作。显示未定义的方法“ID”错误 –

+0

嗨@KshitijKamble,我刚刚更新了答案。 – martincarlin87

+0

感谢您的解决方案@ martincarlin87,我是通过编辑中的第一种方法完成的,现在我可以在我的其他控制器 –