未定义的方法`model_name&#39;对于#<user:xxxxxxxx> </user:xxxxxxxx>

时间:2015-01-24 22:19:26

标签: ruby-on-rails-4 model-view-controller mongoid

我有一个包含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

1 个答案:

答案 0 :(得分:1)

看起来好像是

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

因此,您的问题在于如何定义请求方法(可能在您的模型中)。例如是类方法还是实例方法等。

在不了解你的目标的情况下,这是我能给你的一般答案。创建Request.new可能是正确的,具体取决于您的目标,但如果您的目标是调用请求方法,则必须将其提供给current_tenant

一个控制器不应该按照你的建议调用你的另一个控制器......