上次我们说到@current_user时不要将user对象放在session里,而只放user_id,然后每次去数据库取user对象。
有人不理解,这次的视频给出了答案:
[code]
class UsersController < ApplicationController
def prepare
session[:user] = User.find(:first)
redirect_to action => 'show'
end
def show
@user = session[:user]
end
def update
@user = session[:user]
@user.name = "Foo"
redirect_to :action => 'show'
end
end
[/code]
我们先调用prepare,将user放进session并show,然后我们update,结果session里的user对象是更改了,而更改并没有保存到数据库。
那我们将更改放进数据库不就行了?呵呵,这样每次你更改user对象都需要更新session,太麻烦了。
[code]
class UsersController < ApplicationController
def prepare
session[:user_id] = User.find(:first).id
redirect_to :action => 'show'
end
def show
@user = User.find(session[:user_id])
end
def update
@user = User.find(session[:user_id])
@user.name = ""
@user.valid?
redirect_to :action => 'show'
end
end
[/code]
每次都去数据库取,这样就能保证数据的正确性。
担心效率的朋友们,放心,还有查询缓存呢。
有人不理解,这次的视频给出了答案:
[code]
class UsersController < ApplicationController
def prepare
session[:user] = User.find(:first)
redirect_to action => 'show'
end
def show
@user = session[:user]
end
def update
@user = session[:user]
@user.name = "Foo"
redirect_to :action => 'show'
end
end
[/code]
我们先调用prepare,将user放进session并show,然后我们update,结果session里的user对象是更改了,而更改并没有保存到数据库。
那我们将更改放进数据库不就行了?呵呵,这样每次你更改user对象都需要更新session,太麻烦了。
[code]
class UsersController < ApplicationController
def prepare
session[:user_id] = User.find(:first).id
redirect_to :action => 'show'
end
def show
@user = User.find(session[:user_id])
end
def update
@user = User.find(session[:user_id])
@user.name = ""
@user.valid?
redirect_to :action => 'show'
end
end
[/code]
每次都去数据库取,这样就能保证数据的正确性。
担心效率的朋友们,放心,还有查询缓存呢。

3449

被折叠的 条评论
为什么被折叠?



