Получить предыдущую запись в модели рельсов - PullRequest
1 голос
/ 27 апреля 2011

У меня есть приложение, которое отслеживает чистую стоимость на балансе для клиента. Существует модель клиента, которая имеет много балансов, модель баланса, которая принадлежит клиенту, и каждый баланс имеет много активов и много пассивов (вложенных). На странице показа для баланса он перечисляет активы, пассивы и общую чистую стоимость. Прямо сейчас балансы упорядочены путем ввода квартала (1,2,3 или 4) и года. Таким образом, у каждого клиента есть балансы, перечисленные в первом квартале 2010 года, втором квартале 2010 года и т. Д.

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

Как мне это сделать?

ОБНОВЛЕНИЕ Хорошо, поэтому на более простой модели (модель моего клиента) я выяснил основы для отображения следующего или предыдущего имени клиента в списке:

def nextname
    self.class.
    order( "id" ).
    where( "id > :id", attributes.symbolize_keys).first
end

Единственная проблема с этим, когда он достигает последнего клиента в таблице, он возвращает ошибку:

неопределенный метод `name 'для nil: NilClass Извлеченный источник (около строки № 37):

37: <% = @ client.nextname.name%>

Что мне нужно написать, чтобы вернуть что-то пустое там, где нет другой записи?

1 Ответ

1 голос
/ 27 апреля 2011

Вы всегда должны быть уставшими от вызова методов для вещей, которые не могут быть определены. Это всегда было проблемой, которая предлагала множество решений , каждое из которых имеет свои преимущества.

В этом случае вам следует написать вспомогательный метод, чтобы избежать усложнения вашего представления, и создать метод модели, который будет более конкретным в том, что он делает.

def next
  self.class.order("id").where("id>?", self.id).first
end

В вашем помощнике вы бы создали метод, подобный этому:

def name_for_client(client)
  client and client.name
end

В вашем случае вы бы использовали это так:

<%= name_for_client(@client.next) %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...