2014-01-28 2 views
0

Я сгенерировал приложение, используя строительные леса как таковые :.рельсы: переменная показывается как метод undefined, но объект успешно создан

rails generate scaffold server hostname:string 
    rails generate scaffold template remote_template_id:integer remote_template_name:string server:belongs_to 

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

Когда я бегу шоу действий, я получаю следующее сообщение об ошибке:

undefined method `remote_template_id' for #<Array:0x007f6b44dc3370> 

Extracted source (around line #5): 

2: 
3: <p> 
4: <b>Remote template:</b> 
5: <%= @template.remote_template_id %> 
6: </p> 
7: 

Вот код в мой контроллер шаблона:

def show 

    server=Server.find(params[:server_id]) 
    @template=server.templates.all 


    logger.info "TEMPLATE OBJECT: " + @template.inspect 


    respond_to do |format| 
     format.html # show.html.erb 
     format.json { render json: @template } 
    end 
    end 

Как вы можете видеть выше, у меня есть некоторый вывод отладки используя регистратор, и в консоли сервера rails объект действительно отображается правильно. Объект содержит правильные данные, которые я пытаюсь передать в представление.

Server Load (0.2ms) SELECT "servers".* FROM "servers" WHERE "servers"."id" = ? LIMIT 1 [["id", "1"]] 
    Template Load (0.2ms) SELECT "templates".* FROM "templates" WHERE "templates"."server_id" = 1 
TEMPLATE OBJECT: [#<Template id: 1, remote_template_id: 12, remote_template_name: "another_debian_derivative", server_id: 1, created_at: nil, updated_at: nil>] 
    Rendered templates/show.html.erb within layouts/application (0.9ms) 
Completed 500 Internal Server Error in 6ms 



    ActionView::Template::Error (undefined method `remote_template_id' for #<Array:0x007f6b44dc3370>): 
     2: 
     3: <p> 
     4: <b>Remote template:</b> 
     5: <%= @template.remote_template_id %> 
     6: </p> 
     7: 
     8: <p> 
     app/views/templates/show.html.erb:5:in `_app_views_templates_show_html_erb___2503859911707707300_70049345896300' 
     app/controllers/templates_controller.rb:24:in `show' 

База данных кошерная, отношения видны; Я вижу, что server_id заносится в таблицу шаблонов.

sqlite> .tables 
schema_migrations servers   templates   
sqlite> 
sqlite> .schema servers 
CREATE TABLE "servers" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "hostname" varchar(255), "created_at" datetime NOT NULL, "updated_at" datetime NOT NULL); 
sqlite> select * from servers; 
1|opennebula1|2014-01-28 11:03:02.393136|2014-01-28 11:03:02.393136 
sqlite> 
sqlite> 
sqlite> 
sqlite> .schema templates 
CREATE TABLE "templates" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "remote_template_id" integer, "remote_template_name" varchar(255), "server_id" integer, "created_at" datetime NOT NULL, "updated_at" datetime NOT NULL); 
CREATE INDEX "index_templates_on_server_id" ON "templates" ("server_id"); 
sqlite> select * from templates; 
1|12|another_debian_derivative|1|| 
sqlite> 

и, наконец, здесь вид кода, который erroring, я не изменить или добавить что-нибудь в нем, он был сгенерирован эшафот:

/app/views/templates$ cat show.html.erb 
<p id="notice"><%= notice %></p> 

<p> 
    <b>Remote template:</b> 
    <%= @template.remote_template_id %> 
</p> 

<p> 
    <b>Remote template name:</b> 
    <%= @template.remote_template_name %> 
</p> 

<p> 
    <b>Server:</b> 
    <%= @template.server %> 
</p> 


<%= link_to 'Edit', edit_template_path(@template) %> | 
<%= link_to 'Back', templates_path %> 

Помощь в этом вопросе была бы оценена. Спасибо.

+1

'@ template = server.templates.all' будет возвращать массив объектов шаблона. Пока в 'show.html.erb' вы пытаетесь вызвать' remote_template_id' в этом массиве вместо 'template object'. –

+0

Спасибо Manoj Monga, это правильно. Я ошибался, думая, что рельсы будут автоматизированы. – Pinpin

+0

Это работало для вас тогда? –

ответ

1

@ template = server.templates.all вернет массив объектов шаблона. Пока в show.html.erb вы пытаетесь вызвать remote_template_id в этом массиве вместо объекта шаблона

+0

Вы можете отметить это как ответ :) –

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