2012-05-18 3 views
1

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

NoMethodError in Scans#parse 

Showing J:/code/vsdb/app/views/scans/parse.html.erb where line #18 raised: 

undefined method `parse' for #<Scan:0x23b0590> 
Extracted source (around line #18): 

15: 
16: <div class="field"> 
17:  <%= s.label :parse %><br /> 
18:  <%= s.text_field :parse %> 
19: </div> 
20: <% end -%> 

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

def parse 
    @scan = Scan.new 
end 
+0

Форма ищет атрибут модели, называемый 'parse' на вашей модели сканирования. Не уверен, что вы пытаетесь сделать, но для этого вам нужно добавить столбец базы данных 'parse' в таблицу' scanans'. – Mischa

+0

* Вот метод в контроллере сканирования * - он должен быть у вас MODEL, а не в контроллере! – jdoe

ответ

1

Ошибка возникает из-за синтаксического анализа, который не является методом вашей модели сканирования (а не вашим контроллером). В этом контексте parse будет методом, определяемым автоматически Rails для одного из атрибутов Scan, но в этом случае он отсутствует.

Если вы добавили атрибут, называемый parse to Scan, используя миграцию, вам может потребоваться запустить rake db: migrate.

1

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

В вашем случае у вас есть переменная с именем @scan, которая является экземпляром класса Scan. Именно здесь точка зрения пытается найти метод.

Как указано в комментариях, вы можете обойти это ограничение, объявив определенные методы как «вспомогательные» методы, которые предоставляют их представлению.

ScanController < ApplicationController 

    helper_method :parse 

    def parse 
    @scan = Scan.new 
    end 

    ... 

end 
+0

* Представления Rails не могут обращаться к контроллерам *, если вы не вызвали 'helper_method' один из своих методов. – jdoe

+0

Хорошо, я обновил свой ответ, чтобы отразить это. –

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