#<User:XXXXXXXX> 的未定义方法“model_name”

undefined method `model_name' for #<User:XXXXXXXX>

我有一个包含 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 放入仪表板控制器时,它可以工作,但我知道这是不对的,就好像应用程序无法识别请求控制器一样...

错误是说它无法识别 "request" 方法。

这也是我的请求控制器...

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

嗯,看起来像

current_tenant.request 有问题。这意味着该方法不可用。假设您没有尝试访问 http request ,那么您的请求方法有问题。

所以您的问题在于您如何定义请求方法(可能在您的模型中)。例如它是 class 方法还是实例方法等

在不知道您的目标的情况下,这就是我可以给您的一般答案。根据您的目标,创建 Request.new 可能是正确的,但如果您的目标是调用请求方法,则必须使其对 current_tenant

可用

一个控制器不应该像你建议的那样调用你的另一个控制器...