Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вывод данных из БД 
:(
    Опции темы
AndreyDr
Дата 29.1.2011, 10:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 22.9.2010

Репутация: нет
Всего: нет



Здравствуйте, изучаю ruby on rails и вот сел на одной задаче, создал 3 таблицы в БД (статьи, категории, связующая таблица):
Код

class CreateArticles < ActiveRecord::Migration
  def self.up
    create_table :articles do |t|
      t.integer :parent
      t.string :title
      t.text :smallhtml
      t.text :html
      t.datetime :time
      t.timestamps
    end
  end
  def self.down
    drop_table :articles
  end
end



Код

class CreateCategories < ActiveRecord::Migration
  def self.up
    create_table :categories do |t|
      t.integer :_parent
      t.boolean :_disabled
      t.string :url
      t.string :title
      t.text :keywords
      t.text :description
      t.timestamps
    end
  end
  def self.down
    drop_table :categories
  end
end


Код

class CreateArticlesCategories < ActiveRecord::Migration
  def self.up
    create_table :articles_categories, :id => false do |t|
    t.references :article
    t.references :category
end
  end
  def self.down
    drop_table :articles_categories
  end
end



Сделал создание новых статей, и вывод основных данных, но не получается вывести категорию к которой относится статья.
в article.rb прописал  has_and_belongs_to_many :categories
в category.rb прописал has_and_belongs_to_many :articles
Подскажите пожалуйста, как вывести категорию, соответствующую статье?
Спасибо.        
PM MAIL ICQ   Вверх
DeTeam
Дата 29.1.2011, 11:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 29.10.2009
Где: Россия, Москва

Репутация: нет
Всего: нет



Код

<ul>
<% @articles.categories.each do |category| %>
 <li><%= category.title %></li>
<% end if @articles.categories.length %>
</ul>


как-то так?
PM MAIL WWW ICQ Jabber   Вверх
AndreyDr
Дата 29.1.2011, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 22.9.2010

Репутация: нет
Всего: нет



в ответ получаю 
Код

undefined method `categories' for #<ActiveRecord::Relation:0x2d1d5b0>

PM MAIL ICQ   Вверх
DeTeam
Дата 29.1.2011, 14:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 29.10.2009
Где: Россия, Москва

Репутация: нет
Всего: нет



Упс, там @article. т.е. это должна быть единичная запись /show
все равно та же ошибка?
PM MAIL WWW ICQ Jabber   Вверх
AndreyDr
Дата 29.1.2011, 15:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 22.9.2010

Репутация: нет
Всего: нет



Всё равно тоже самое
PM MAIL ICQ   Вверх
DeTeam
Дата 29.1.2011, 15:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 29.10.2009
Где: Россия, Москва

Репутация: нет
Всего: нет



Таблицы нормально создались?

Выложите код моделей?
PM MAIL WWW ICQ Jabber   Вверх
AndreyDr
Дата 29.1.2011, 15:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 22.9.2010

Репутация: нет
Всего: нет



Таблицы создались нормально, данные туда записываются
category.rb:
Код

class Category < ActiveRecord::Base
  has_and_belongs_to_many :articles
  default_scope order('categories.title')
end

article.rb:
Код

class Article < ActiveRecord::Base
  validates :title, :presence => true
  validates :smallhtml, :presence => true
  validates :html, :presence => true
  cattr_reader :per_page
  has_and_belongs_to_many :categories
end



PM MAIL ICQ   Вверх
DeTeam
Дата 29.1.2011, 15:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 29.10.2009
Где: Россия, Москва

Репутация: нет
Всего: нет



/show
@article = Article.find(params[:id])


Вьюшка:
<%= @article.categories.map(&:title).join(",") %>

ругается? 


PM MAIL WWW ICQ Jabber   Вверх
AndreyDr
Дата 29.1.2011, 15:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 22.9.2010

Репутация: нет
Всего: нет



В ответ получаю 
Код

undefined method `categories' for nil:NilClass

PM MAIL ICQ   Вверх
DeTeam
Дата 29.1.2011, 16:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 29.10.2009
Где: Россия, Москва

Репутация: нет
Всего: нет



Хм, значит дело в Article.find, nil возвращает, посмотрите чего там не так может быть..

это все метод show
PM MAIL WWW ICQ Jabber   Вверх
AndreyDr
Дата 29.1.2011, 16:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 22.9.2010

Репутация: нет
Всего: нет



Сейчас срабатывает так: вывожу:
Код

<%=article.categories%>

и показывает:
Код

[#<Category id: 2, _parent: nil, _disabled: nil, url: nil, title: " второй раздел", keywords: nil, description: "123123123", created_at: nil, updated_at: nil>] 

если добавить <%=article.categories.title%>, то получаю:
Код

undefined method `title' for #<Class:0x2ff74c8>

PM MAIL ICQ   Вверх
DeTeam
Дата 29.1.2011, 17:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 29.10.2009
Где: Россия, Москва

Репутация: нет
Всего: нет



Код

article.categories.map(&:title).join(", ")


выводить в цикле надо либо как выше написал
PM MAIL WWW ICQ Jabber   Вверх
AndreyDr
Дата 29.1.2011, 21:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 22.9.2010

Репутация: нет
Всего: нет



Спасибо большое =) разобрался
PM MAIL ICQ   Вверх
AndreyDr
Дата 29.1.2011, 22:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 22.9.2010

Репутация: нет
Всего: нет



Для того чтобы вывести все категории, создал хэлпер:
Код

def blogs
    bl = Categories.all
    bl
  end

и уже в шаблоне вывожу:
Код

<% blogs.each do |bl| %>
<%= bl.title%>
<%end%>

но в ответ получаю
Код

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.each

Таблица с категориями точно не пустая, не пойму почему возвращает пустую переменную...
PM MAIL ICQ   Вверх
DeTeam
Дата 29.1.2011, 22:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 29.10.2009
Где: Россия, Москва

Репутация: нет
Всего: нет



Попробуй 

<%= debug bogs%>
PM MAIL WWW ICQ Jabber   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Ruby on Rails"
source777
  • С чего начать? начинаем
  • Документацию смотрим тут
  • Обязательно следуйте правилам Vingrad.
  • Пожалуйста, прочитайте рекомендации по работе в форуме и навигации по Vingrad.
  • Для вставки кодов Ruby используйте тег: [code=ruby]код[/code]. Когда в будущем подсветка синтаксиса для Ruby будет реализована, весь исходных код преобразится.
  • Используйтe чекбокс "Транслит" (возле кнопок кодов), если у Вас нет русских шрифтов.
  • Помните, для каждого вопроса должна быть своя тема.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, source777.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Ruby On Rails | Следующая тема »


 




[ Время генерации скрипта: 0.0549 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.