2015-11-30 5 views
0

В настоящее время я создаю приложение rails, в котором пользователь входит в панель инструментов и заполняет форму. Я получаю эту ошибку:Rails NoMethodError in Users # index

NoMethodError in Users#index 
Showing C:/Users/xxx/Desktop/Sites/form-app/app/views/users/_dashboard_nav.html.erb where line #7 raised 
undefined method `organization' for #<User:0x0000000c3e4de0> 

UsersController.rb

class UsersController < ApplicationController 
    before_action :authenticate_user! 

    def index 
     @user = current_user 
     # @organization = current_user.organization.all 
    end 

    def show 
    end 

end 

_dashboard_nav.html.erb

... 
<% if @user.organization.exists? %>  <-- This is line 7 
    <%= link_to "Profile", edit_user_organization_path(@user, @organization), class: "dashboard-nav__item" %> 
<% else %> 
    <%= link_to "Profile", new_user_organization_path(@user, @organization), class: "dashboard-nav__item" %> 
<% end %> 
... 

organization.rb

class Organization < ActiveRecord::Base 
    belongs_to :user 
end 

user.rb

class User < ActiveRecord::Base 
    # Include default devise modules. Others available are: 
    # :confirmable, :lockable, :timeoutable and :omniauthable 
    devise :database_authenticatable, :registerable, 
     :recoverable, :rememberable, :trackable, :validatable 

    has_many :organizations 
    has_many :form_submissions 
end 
+0

Теперь я получаю 'неопределенный метод 'организации' за ноль: NilClass' на следующей странице, одна и та же ошибка одинаковая строка все. – aishaq11

+0

Проблема в том, что в организациях '' 'отсутствует' '' <% if @ user.organizations.exists? %> 'Соглашения о рельсах. Так же, как комментарий ... Контроллер _Users не управляет вашей моделью пользователя, потому что она была создана при разработке. Модель пользователя контролируется модулями разработки. Вы можете переопределить их, но не предлагать. Я предлагаю просто использовать 'current_user' в любом месте, где вы находитесь в коде. Кстати, ваш 'users_controller' будет работать с вашими пользовательскими представлениями. –

+0

Прежде чем использовать' current_user' в своем контроллере, вы должны спросить, является ли 'user_signed_in?', А затем, если 'true' использует' current_user', даст вам класс 'nil' в' current_user' и сломает весь ваш код. –

ответ

0

Вы можете просто избавиться от экземпляра переменной @user. Кроме того, вы должны использовать organizations вместо organization

Контроллер:

class UsersController < ApplicationController 
    before_action :authenticate_user! 

    def index 
    # do nothing here 
    end 

    # other methods 
end 

Вид:

<% if current_user.organizations.exists? %> 
    <%= link_to "Profile", edit_user_organization_path(current_user, @organization), class: "dashboard-nav__item" %> 
<% else %> 
    <%= link_to "Profile", new_user_organization_path(current_user, @organization), class: "dashboard-nav__item" %> 
<% end %> 
0

Если один пользователь может иметь много организаций, то проверка состояния должны быть

if @user.organizations.exists? 
+0

Теперь я получаю 'undefined method 'организации' для nil: NilClass' на следующей странице, в той же самой ошибке все равно. – aishaq11

+0

@user должен содержать объект пользователя, теперь он равен нулю, поэтому ошибка – Nithin

+0

Я просмотрел это, и я вижу, что ему нужен объект все время. Я довольно грубо программирую, поэтому я просто не регистрирую это. Есть ли пример, который вы можете дать мне из объекта, который я могу передать @user? – aishaq11

Смежные вопросы