我有一个奇怪的问题,我无法追查...... 对于上下文,我有用户,注册表和Giftlines的资源。每个用户都有许多注册表。每个注册表都有许多礼品。它以相反的方式属于他们的关联。
基本上发生的是,当我创建礼品线时,礼品线本身已正确创建,并正确链接到其关联的注册表,但在重定向回注册表显示页面的过程中,{{ 1}}变量被清除,我已经注销了。
据我所知,出现问题的地方在于registries_controller:
session[:user_id]
现在,要清楚,我可以正常显示注册表,并且没有任何奇怪的事情发生。只有当我添加礼品线时, def show
@registry = Registry.find(params[:id])
@user = User.find(@registry.user_id)
if (params[:user_id] && (@user.login != params[:user_id]) )
flash[:notice] = "User #{params[:user_id]} does not have such a registry."
redirect_to user_registries_path(session[:user_id])
end
end
变量才会被清除。
我使用了调试器,这似乎正在发生。
session[:user_id]
从那里我们可以看到代码在添加项目后返回到show命令,并且(rdb:19) list
[20, 29] in /Users/kriston/Dropbox/ruby_apps/bee_registered/app/controllers/registries_controller.rb
20 render :action => 'new'
21 end
22 end
23
24 def show
=> 25 @registry = Registry.find(params[:id])
26 @user = User.find(@registry.user_id)
27 if (params[:user_id] && (@user.login != params[:user_id]) )
28 flash[:notice] = "User #{params[:user_id]} does not have such a registry."
29 redirect_to user_registries_path(session[:user_id])
(rdb:19) session[:user_id]
"tester"
(rdb:19)
变量仍然设置。
session[:user_id]
踩到,我们到了这一步。
并且(rdb:19) list
[22, 31] in /Users/kriston/Dropbox/ruby_apps/bee_registered/app/controllers/registries_controller.rb
22 end
23
24 def show
25 @registry = Registry.find(params[:id])
26 @user = User.find(@registry.user_id)
=> 27 if (params[:user_id] && (@user.login != params[:user_id]) )
28 flash[:notice] = "User #{params[:user_id]} does not have such a registry."
29 redirect_to user_registries_path(session[:user_id])
30 end
31 end
(rdb:19) session[:user_id]
"tester"
(rdb:19)
仍然设置。
此时,网址格式为session[:user_id]
,因此localhost:3000/registries/:id
失败,并且params[:user_id]
条件不会发生。 (除非我完全错了>。<)
然后出现下一位,即
if
然后当我点击下一个......
(rdb:19) list
[1327, 1336] in /Library/Ruby/Gems/1.8/gems/actionpack-2.3.5/lib/action_controller/base.rb
1327 end
1328
1329 def perform_action
1330 if action_methods.include?(action_name)
1331 send(action_name)
=> 1332 default_render unless performed?
1333 elsif respond_to? :method_missing
1334 method_missing action_name
1335 default_render unless performed?
1336 else
(rdb:19) session[:user_id]
"tester"
(rdb:19) next
2: session[:user_id] =
/Library/Ruby/Gems/1.8/gems/actionpack-2.3.5/lib/action_controller/filters.rb:618
return index if nesting != 0 || aborted
(rdb:19) list
[613, 622] in /Library/Ruby/Gems/1.8/gems/actionpack-2.3.5/lib/action_controller/filters.rb
613 private
614 def call_filters(chain, index, nesting)
615 index = run_before_filters(chain, index, nesting)
616 aborted = @before_filter_chain_aborted
617 perform_action_without_filters unless performed? || aborted
=> 618 return index if nesting != 0 || aborted
619 run_after_filters(chain, index)
620 end
621
622 def run_before_filters(chain, index, nesting)
(rdb:19) session
{:user_id=>nil, :session_id=>"49992cdf2ddc708b441807f998af7ddc", :return_to=>"/registries", "flash"=>{}, :_csrf_token=>"xMDI0oDaOgbzhQhDG7EqOlGlxwIhHlB6c71fWgOIKcs="}
已清除,当页面呈现时,我已注销。 >。<
Sooo ....知道为什么会这样吗? 我刚才想到,我不确定我是不是要在这里粘贴大量的调试输出...如果我不打算这样做,有人会指出我。 >>
是的,这只发生在我添加了giftitem时,它会将我发送回注册表页面。当我查看它时,会出现相同的代码,但session[:user_id]
变量未被清除。
这让我有点疯狂。
谢谢!
- 编辑:添加了会话控制器代码 -
这是会话控制器代码。
session[:user_id]
除了“注销”链接外,其他任何地方都不会调用destroy。
答案 0 :(得分:0)
当您说退出时,您的意思是您的会话用户被清除了吗?您发布了很多诊断信息,这很好,但您没有公开会话管理的方式。
@user和“登录用户”是否可能是同一个变量?如果是这样,它可能会被替换。
通常最好将一个标识为@session_user,并将@user保留为更通用的变量。