我找不到有关如何执行此操作的详细信息,即使有很多关于如何使用像redirect_to
这样的散列将params传递给重定向的建议:action => 'something', :controller => 'something'
在我的应用程序中,我在路线文件中有以下内容
match 'profile' => 'User#show'
我的节目动作像这样松散
def show
@user = User.find(params[:user])
@title = @user.first_name
end
重定向发生在像
这样的用户控制器中 def register
@title = "Registration"
@user = User.new(params[:user])
if @user.save
redirect_to '/profile'
end
end
当我重定向时,问题出在注册操作中我如何传递params以便我可以从数据库中获取该用户或更好...我已经有一个用户变量,所以如何传递用户对象演出动作?
马修
答案 0 :(得分:7)
如果您正在进行重定向,Rails实际上会向浏览器发送带有URL的302 Moved
响应,浏览器会向该URL发送另一个请求。所以你不能像在Ruby中那样“传递用户对象”,你只能传递一些url编码的参数。
在这种情况下,您可能希望将路由定义更改为:
match 'profile/:id' => 'User#show'
然后像这样重定向:
redirect_to "/profile/#{@user.id}"
答案 1 :(得分:2)
首先,我会为您的路线命名,以便更轻松地使用它:
match '/profile/:id' => 'users#show', :as => :profile
然后您将重定向到它,如下所示:
redirect_to profile_path(@user) # might have to use profile_path(:id => @user.id)
然后从数据库中拉出用户:
def show
@user = User.find(params[:id]) # :id comes from the route '/profile/:id'
...
end
顺便说一句,如果您使用Devise进行身份验证,它会为您提供current_user方法,因此您不需要传递用户的ID:
match '/profile' => 'users#show', :as => :profile
redirect_to profile_path
def show
@user = current_user
end