我在控制器A上调用一个方法来呈现一个jbuilder模板(一个名为signed_in.json.jbuilder的文件)。在模板中我想调用一个方法,friendsCount,它在控制器B中。当我尝试访问模板内的控制器B方法时,我收到错误。错误是:
NameError - undefined local variable or method `friendsCount' for #<#<Class:0x007f90a09994f8>:0x007f90a0998788>:
app/views/api/sessions/signed_in.json.jbuilder
我认为向控制器B添加helper_method: friendsCount
应该可以解决我想要解决的问题类型:在视图中使控制器方法可用。
实际上,当我尝试在我的jbuilder模板(下面的控制器C)中从我的ApplicationsController访问一个方法时,我没有问题。
这是我的代码:
控制器A:
class Api::SessionsController < ApplicationController
def create
@user = User.find_by_credentials(session_params[:username], session_params[:password])
if @user.nil?
render json: ["couldn't find user"], status: 404
else
sign_in!(@user)
render :signed_in
end
end
private
def session_params
params.require(:session).permit(:username, :password)
end
end
JBUILDER模板:signed_in.json.jbuilder
json.friendsSorted sortFriends
json.friends friendsCount
控制器B
class Api::FeedsourcesController < ApplicationController
helper_method :friendsCount
def friendsCount
friendsCountHash = {}
# ... populate friendsCountHash
render json: friendsCountHash
end
CONTROLLER C
class ApplicationController < ActionController::Base
helper_method :sortFriends
def sortFriends
#...
return sortedFriendsArray
end
end
我不想在helpers文件夹中使用friendsCount方法,因为我还需要能够将此方法的直接控制器路由用于其他目的。
答案 0 :(得分:2)
您需要在调用控制器或其超类中使用辅助方法。
在您的情况下,它是SessionsController
和ApplicationController
。
FeedsourcesController
不是SessionsController
的超类,因此视图渲染器不知道其中的任何方法。