我有一个包含2个部分的仪表板。一个部分工作正常,并做其设想(账单)。另一部分设置类似于账单但不工作(请求)。当我查看我的日志时,它显示正在查询租户(用户),同样,查询第一部分但第二部分不查询。当我去我的仪表板控制器并将部分实例更改为(Request.new)时它可以工作,但我似乎无法让它通过控制器工作。我不想在模型中使用该方法。我正在使用mongoid。
这是我在仪表板中的渲染......
<%= render partial: "request", locals: {request: @request} %>
在我有部分......
<%= form_for [:tenants, request] do |f| %>
在仪表板控制器上我有......
def show
@dashboard = current_tenant
@bill = current_tenant.bill || current_tenant.build_bill
@request = current_tenant.request || current_tenant.build_request
end
(如果我更改@request = Request.new它工作正常,但我知道这不对)
账单部分工作,仪表板找到租户,但我一直在
“未定义的方法`请求'#
知道我错过了什么吗?我将票据控制器与请求控制器进行了比较,但我找不到任何差异。当我将Model.new放入仪表板控制器时,它可以工作,但我知道这是不对的,就好像应用程序不会识别请求控制器......
该错误表示它无法识别“请求”方法。
此处是我的控制器请求...
class Tenants::RequestsController < ApplicationController
before_filter :authenticate_tenant!
def index
@requests = Request.all
end
def show
@request = Request.find(params[:id])
end
def create
if @request = current_tenant.create_request(authorization_params)
redirect_to tenants_dashboard_path, :notice => "#{request.manager_name} has been Authorized!"
else
redirect_to tenants_dashboard_path, :error => "#{request.manager_name} has NOT been Authorized, please try again."
end
end
def edit
end
def update
if current_tenant.request.update_attributes(authorization_params)
redirect_to tenants_dashboard_path, :notice => "You have approved #{request.manager_name} to review your report"
else
redirect_to tenants_dashboard_path, :notice => "#{request.manager_name} is NOT allowed to review your report"
end
end
def destroy
@request = Request.find(params[:request_id])
name = @request.name
if @request.destroy
flash[:notice] = "\"#{name}\" was successfully removed from your profile."
redirect_to @dashboard
else
flash[:error] = "There was an error deleting this managers access."
render :show
end
end
答案 0 :(得分:1)
看起来好像是
current_tenant.request
有问题。这意味着该方法不可用。假设您没有尝试访问http request
,那么您遇到了请求方法的问题。
因此,您的问题在于如何定义请求方法(可能在您的模型中)。例如是类方法还是实例方法等。
在不了解你的目标的情况下,这是我能给你的一般答案。创建Request.new
可能是正确的,具体取决于您的目标,但如果您的目标是调用请求方法,则必须将其提供给current_tenant
一个控制器不应该按照你的建议调用你的另一个控制器......