2016-09-22 3 views
0

К сожалению, у нашего Ruby Developer нет города, и у нас есть проблема, требующая исправления обхода, пока он не вернется. Мне было поручено найти его.Ruby on Rails - Неопределенный метод - Rails 3.2.13

Я пытаюсь получить доступ к одному из наших представлений базы данных hr_accounts_view, который содержит необходимые данные, которые нам необходимо включить в нашу существующую страницу, которая опирается на совершенно другую таблицу. Все, что мы пытаемся забрать, это колонка Status с нашего обзора, поэтому я сделал все возможное, чтобы модель/контроллер/просмотр были максимально простыми.

Моя hr_account_view модель:

class HrAccountView < ActiveRecord::Base 

    self.table_name = 'hr_accounts_view' 

    include Savable 

    # belongs to :hr_account 
    belongs to :employee, foreign_key: :id 


    validates :Status, presence: true 



    end 

Hr_Account_Views Контроллер:

class HrAccountViewsController < ApplicationController 

load_and_authorize_resource 

def show 
    @HrAccountView.Status = HrAccountView.Status 
end 

private 

end 

Я также отделил вид из в его собственной папке внутри представлений, в попытке сделать это соотнести с новый контроллер. Мы показываем эту страницу на нашей общей странице.

Страница вызывается из нашего шоу, hraccountsview/_apptment.html.erb:

<table> 
    <tr> 
    <td> 
    Status<br /> 
     <%= display_text_field @HrAccountView.Status %> 
    </td> 
    </tr> 
</table> 

Я прошел через и читать кучу постов, ссылающихся на этот вопрос, и, похоже, этот вопрос будет объявление в контроллере отсутствует, но я пробовал всевозможные комбинации. К сожалению, большинство из них действительно сделано в рубинах и рельсах - это незначительные изменения в странице и некоторые функции поиска, но никогда не нужно добавлять дополнительную таблицу/представление.

В соответствии с сообщением об ошибке у меня есть неопределенный метод «Статус» для nill: NillClass, и он встречается в строке 5 моей страницы, которая отображается. Если я заброшу спасательный ниль, на странице будет отображаться хотя бы заголовок, но нет данных. Просматриваемая запись содержит заполненную запись для столбца «Статус». Это заставляет меня думать, что проблема связана с моделью, а не с контроллером, но на данный момент я вращал свои колеса, пытаясь понять, где находится недостающее соединение.

Есть ли у кого-нибудь представление о том, где мне не хватает связи?

Вам нужна помощь!

Rails версии 3.2.13 Версия База данных: SQL 2012

+0

Здесь происходит кое-какая замена. Являются ли \ @hraccountview и \ @HrAccountView одинаковыми? –

+0

Это новый код? Или вы пытаетесь исправить существующий код? – zetetic

+0

Они должны быть одинаковыми. Я даже не заметил этого до того, как я отправил сообщение. – Live2Learn

ответ

0

Есть несколько соглашений, которые могут помочь:

Атрибуты (модель версия столбца) указаны в нижнем регистре. Таким образом:

validates :status, presence: true 

Такие же, как переменные. Например.:

def show 
    @status = HrAccountView.Status 
end 

Я подозреваю, что HrAccountView.Status также может быть неправильным, хотя, возможно, нет. Нам нужно будет посмотреть, что еще происходит в контроллере. Обычно выполняется некоторая операция, выполняющая find на модели с использованием значения параметра из запроса.

Имя переменной в контроллере и вид должен соответствовать:

<%= display_text_field @status %> 

В Ruby большой буквы строка (например, Status) является константой, строчной строка представляет собой ссылку на переменную или метод. Если префикс «@», это ссылка на переменную экземпляра.

+0

Это сделало трюк. Поменяв случаи, он смог отбросить необходимую информацию и больше не выдает ошибку. Я чувствовал, что уже несколько раз пробовал это, но я должен был где-то синхронизировать случаи. – Live2Learn

0

def show @HrAccountView.Status = HrAccountView.Status end

Если я что-то отсутствует, @HrAccountView не определен в любом месте, так что это ноль объект, то есть вы не может получить доступ имущество Status на нем. Сначала вы должны объявить что-то, например @HrAccountView = HrAccountView.find(params[:id]). Это приведет к загрузке одной записи из вашего представления (если найдено) в вашу переменную.

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