2013-04-30 3 views
0

У меня есть область в модели worequests:Рельсы тестовая область с точки зрения

scope :notcompl, where("statuscode_id != ?", Statuscode.last.id) 

Я хотел бы только показать кнопку редактирования в worequests показать страницу, если worequest является notcompl. Я пробовал это и получил неопределенный метод:

<% if @worequest.notcompl? %> 
    <= link_to 'Edit', edit_worequest_path(@worequest), :class => 'btn btn-success' %> 
<% end %> 

Каков правильный синтаксис?

Спасибо за помощь!

ответ

1

Сфера охвата найдет все записи, которые удовлетворят ваше состояние.

Похоже, что вы хотите проверить, есть ли у worequeststatuscode_id из Statuscode.last.id. Что вам нужно, это метод экземпляра вашего класса вместо сферы:

class Worequest < ActiveRecord::Base 

    def not_complete? 
     statuscode != Statuscode.last.id 
    end 
end 

Затем на ваш взгляд, вы можете проверить, если Worequest завершена или нет:

<% if @worequest.not_complete? %> 
    <= link_to 'Edit', edit_worequest_path(@worequest), :class => 'btn btn-success' %> 
<% end %> 

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

+0

Я также пробовал @ worequest.notcompl – Reddirt

+0

Спасибо - def работал! – Reddirt

0

Сфера применения относится к моделям, а не к контроллерам. Переместите его на Worequest, и он должен работать.

+0

Извините, это в модели. Я исправил вопрос. – Reddirt

0

От doc:

Область применения: Добавляет метод класса для поиска и запросов к объектам.

Проблема в том, что вы вызываете метод notcompl в экземпляре, не входящем в класс. Worequest.notcompl должен работать (не в том же примере).

PS: См. Ответ @alexBrand.

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