【发布时间】:2016-02-11 14:39:52
【问题描述】:
我在控制器 A 上调用一个方法,该方法呈现一个 jbuilder 模板(一个名为 signed_in.json.jbuilder 的文件)。在模板中,我想调用控制器 B 中的方法 friendsCount。当我尝试访问模板中的控制器 B 方法时出现错误。错误是:
NameError - undefined local variable or method `friendsCount' for #<#<Class:0x007f90a09994f8>:0x007f90a0998788>:
app/views/api/sessions/signed_in.json.jbuilder
我认为将helper_method: friendsCount 添加到控制器 B 应该可以解决我想要解决的问题类型:使控制器方法在视图中可用。
实际上,当我尝试从我的 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
控制器C
class ApplicationController < ActionController::Base
helper_method :sortFriends
def sortFriends
#...
return sortedFriendsArray
end
end
我不想在 helpers 文件夹中包含 friendsCount 方法,因为我还需要能够有一个直接的控制器路由到该方法以用于其他目的。
【问题讨论】:
标签: ruby-on-rails ruby