SupremeA
SupremeA

Reputation: 1621

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

I have a dashboard containing 2 partials. One partial works fine and does what its suppose to (bill). The other partial is setup similar to bill but wont work(request). When I look at my log it shows that the tenant(user) is being queried, also, the 1st partial is queried but the 2nd partial doesn't query. when I went to my dashboard controller and changed the instance of the partial to (Request.new) it works but I can't seem to get it to work right thru the controller. I don't want to have the method in the model. I am using mongoid.

SO here is my render in the dashboard...

        <%= render partial: "request", locals: {request: @request} %>

In the partial I have...

    <%= form_for [:tenants, request] do |f| %>

And on the dashboard controller I have...

  def show
    @dashboard = current_tenant
    @bill = current_tenant.bill || current_tenant.build_bill
    @request = current_tenant.request || current_tenant.build_request
  end 

(if I change @request = Request.new it works fine but I know that's not right)

The bill partial works and the dashboard finds the tenant but I keep getting

"undefined method `request' for #

Any idea of what I am missing? I compared the bill controller to the request controller and I cant find any differences. When I put the Model.new into the dashboard controller it works but I know this isn't right, its as if the app wont recognize the Request controller...

The error is saying it doesn't recognize "request" method.

Also here is my controller for 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

Upvotes: 0

Views: 344

Answers (1)

Clam
Clam

Reputation: 945

Well it looks like

current_tenant.request has an issue. That means that the method is not available. Assuming you're not trying to access the http request , then you have an issue with the request method.

So your issue is with how you defined the request method (maybe in your model). e.g. is it a class method or a instance method etc.

Without knowing your goal, that's the general answer I can give you. Creating a Request.new could be right depending on your goal, but if your goal is to call the request method, you must make it available to current_tenant

One controller shouldn't be calling your other controller as you have suggested...

Upvotes: 1

Related Questions