2011-04-30 2 views
0

У меня есть вложенная форма. Форма представляет собой модель под названием list, которая имеет атрибут: name и a: month. Эта модель списка имеет другую модель, вложенную внутри вызываемого элемента, которая имеет атрибуты: name и: amount. Список содержит много элементов, и элемент принадлежит списку. Я создал переменный в моем контроллере (не уверен, если это лучший способ), который насчитывает весь пункт суммы, как это:Показать значение переменной из другой записи в Rails 3?

@amount_total = Item.where(:list_id => @list).sum("amount") 

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

EDIT

В моем шоу в контроллере у меня есть следующие (на основе ниже ответ):

@list = List.find(params[:id]) 

Но мне нужно создать переменную @previous_list, что-то вроде этого :

@previous_list = List.order("id").where("id<? AND user_id=?", self.id, self.user_id).last 

Мне нужно найти ранее введенный список, но для одного и того же пользователя. Однако, когда я ставлю эту переменную таким образом, она говорит, что существует неопределенный метод «user_id». Мысли?

+0

Имеет ли ваша модель пользователя отношение к списку со списком? Есть ли у ListImany отношения с пользователем? Кроме того, вы, вероятно, хотите использовать created_at для заказа своего запроса, а не id. Идентификатор не обязательно хронологический, тогда как created_at всегда будет. – ipd

ответ

0

Ответ от IPD получил меня ближе к решению, а вот как я закончил это для моей конкретной ситуации:

Чтобы показать предыдущий список всего - Список Helper:

def prev_total(list) 
list and list.items.sum("amount") 
end 

В list.rb модель:

def previouslist 
    self.class.order("id").where("id<? AND user_id=?", self.id, self.user_id).last 
end 

Затем в моем списке show.html.erb файла:

<%= prev_total(@list.previouslist) %> 

Это работает просто отлично!

1

Вы, вероятно, следует переместить эту логику в модель списка и создать TOTAL_AMOUNT аксессор там, как:

def total_amount 
    Item.where(:list_id => self.id).sum("amount") 
end 

Тогда в контроллере нужно просто загрузить предыдущий список в @previous_list переменную ,

В ваших взглядов вы тогда будете в состоянии сделать:

<%= @list.total_amount %> 
<%= @previous_list.total_amount %> 

Иэн.

+0

Спасибо за быструю обратную связь. Извините, может быть, немой вопрос, но где и как определить переменные @list и @previous_list? – FattRyan

+0

Хороший вопрос! Это вы, скорее всего, сделаете в своем действии «show» вашего контроллера. Как именно вы его реализуете, будет зависеть от вашего намерения, какой предыдущий список вы хотите загрузить? Что вы подразумеваете под предыдущим? – ipd

+0

Спасибо, я почти там, но все еще что-то не хватает.Я помещал его в редакцию выше. – FattRyan

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