Rails 控制器引用模型时就说方法不存在

rails123 · 2012年06月16日 · 最后由 rails123 回复于 2012年06月16日 · 2242 次阅读

控制器引用模型时就说方法不存在,怪的是在 AController 正常,但在 BController 就说 ActionView::TemplateError (undefined method idno' for nil:NilClass) 并且在AView <%= @current_user.idno %>正常。 但在BView <%= @current_user.idno %> 时也报同样错: ActionView::TemplateError (undefined methodidno' for nil:NilClass)

代码如下:

ApplicationController < ActionController::Base
    @current_user = User.find_by_id(params[:user_id])
......

end

AController < ApplicationController
    @contas = Conta.find(:first,:conditions =>  ["idno=?", @current_user.idno])

..........
end

BController < ApplicationController
    @contas = Conta.find(:first,:conditions =>  ["idno=?", @current_user.idno])

..........
end
匿名 #1 2012年06月16日

id 为空 所以 current_user 是 nil

还是先学 ruby 再学 rails,能避免很多小问题

在 ApplicationController < ActionController::Base @current_user = User.find_by_id(params[:user_id]) 里已得非空@current_user,且在并且在 AView <%= @current_user.idno %>已正常现示。

在 ApplicationController < ActionController::Base @current_user = User.find_by_id(params[:user_id]) 里已得非空@current_user,且在并且在 AView <%= @current_user.idno %>已正常现示。

的确挺诡异,不能确定是你其他的代码的问题么?或者 id 号没有传递?

AController 和 BController 及都没对@current_user作任何改变,又都是从 ApplicationController 导出,但@current_user在 AController 非空,在 BController 就变空了。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号