2010-02-11 2 views
0

Вот результат:ноль

Parameters: {"action"=>"confirm", "id"=>"1", "controller"=>"sites"} 
User Columns (2.2ms) SHOW FIELDS FROM `users` 
User Load (0.3ms) SELECT * FROM `users` WHERE (`users`.`id` = 2) LIMIT 1 
School Load (0.3ms) SELECT * FROM `schools` LIMIT 1 
Rendering template within layouts/application 
Rendering sites/confirm 

ActionView::TemplateError (You have a nil object when you didn't expect it! 
You might have expected an instance of Array. 
The error occurred while evaluating nil.map) on line #4 of app/views/sites/confirm.erb: 
1: 
2: <% 
3: form_for(:site, :url => {:action => :confirm}) do 
4: select_tag(:id, options_from_collection_for_select(@confirm, 'id', 'confirm')) 
5: end 
6: %> 

Даже когда я сделал: @confirm = Request.find (: все) в контроллере, он по-прежнему возвращается сообщение об ошибке.

Сайты управления: вид

def confirm 
x = current_user.contact.contactable 
@confirm = Request.find(:all, :conditions => ["location_id = ?", x]) 
end 

Confirm в папке сайтов:

<% 
form_for(:site, :url => {:action => :confirm}) do 
select_tag(:id, options_from_collection_for_select(@confirm, 'id', 'confirm')) 
end 
%> 

Любая идея, почему? Ошибка возникает в строке 4. Я считаю, что он считает, что @confirm не является массивом, хотя это должно быть потому, что в контроллере я передаю два элемента из таблицы в него. Я сделал options_from_collection_for_select параметры, аналогичные параметрам в руководстве по направляющим. В принципе, я хочу показать список опций для выбора на основе того, соответствуют ли эти параметры местоположению текущего пользователя. Спасибо за любые предложения.

+0

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

+0

Также в нем говорится: Образцовый шаблон в макетах/приложении. Есть ли способ переопределить это? – JohnMerlino

+0

Да, в действии вашего контроллера вы можете указать, какой шаблон использовать с: render: template => "directory/filename_without_extension" –

ответ

1

Ошибка подразумевает, что переменная экземпляра @confirm в методе confirm вашего контроллера равна нулю. Можете ли вы добавить некоторые протоколирования, чтобы убедиться, что это так или нет?


Edit: Я только заметил, что ваш form_for блок, как писал в вопросе использует:

<%= form_for ... %> 

Когда он должен быть:

<% form_for ... %> 
+0

Я обновил вопрос с подробной информацией с выхода. Даже когда я сделал find (: все) и, несмотря на то, что у меня есть несколько записей в базе данных, и я проверил, что он реализовал их в скрипте/консоли, он все равно возвращает объект nil в rails. – JohnMerlino

+0

Не следует использовать 'select', а не' select_tag' с 'form_for', потому что он предназначен для работы с объектами модели. –

+0

Спасибо. Он не распознает переменную экземпляра вообще, даже когда я назначаю ей явный массив в контроллере, например Students.all. Он не распознает это в представлении. Я что-то упустил в представлении, чтобы переменная экземпляра была распознана? – JohnMerlino

1

Является ли действие после того, как ключевое слово «private» в вашем контроллере?

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

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