2016-02-11 2 views
0

Хорошо, я искал по всему Интернету и не нашел ответа. Я ищу способ отображения имени категории в представлении представления сообщения (я должен упомянуть, что я новичок в Rails).Rails 4: объединение связанных объектов в представлениях

У меня есть ....

модель "сообщение"

class Post < ActiveRecord::Base 
    has_many :categories 
    belongs_to :user 
end 

модель "Категория"

class Category < ActiveRecord::Base 
    belongs_to :post 
end 

и "показать" вид «пост» имеет такую ​​строку

<%= @post.category.name %> 

сообщение об ошибке, как снимок экрана: NoMethodError in Posts#Show - undefined method `category' for #

Действие "показать" в "Сообщений" контроллера:

def show 
    @post = Post.find(params[:id]) 
end 

Я здание это приложение по немного устаревшее учебное видео на удеми. В этом видео нет в категории модели линии с «attr_accessible»

class Category < ActiveRecord::Base 

    attr_accessible :name   <---------------------- this 
    has_many :posts 
end 

... но так как Rails 4.0 это больше не существует. Есть ли другой способ получить название категории сообщения?

Заранее спасибо :-)

+0

Подумав некоторое время ... было неясно, что я хочу, чтобы категория поста, которую он сам показывал. Например. есть четыре категории: «автомобили», «циклы», «лодки» и «самолеты», а фактическая публикация в представлении шоу - это текст о лодках, чем я хочу, чтобы там отображались «лодки» в качестве названия категории под текстом. Не все доступные категории (сделанные с блоком), а не первая категория (сделанные с помощью «... categories.first»). – dvdt

ответ

1

не существует категория метода, так как модель Post имеет много «категории» не одна «категории». Сообщение должно иметь метод «категории». Тогда, если вы хотите, чтобы показать первый «категорию» пост в представлении:

<%= @post.categories.first.name %> 

Если вы хотите, чтобы показать все «категории» пост, то вы итерацию коллекции:

+0

Привет, Армандо, спасибо за очень быстрый ответ. Я пробовал это когда-то между ними, но есть только «категория», но не название категории. Я смотрю. Но было бы хорошо понять, что нужно написать, это эта строка кода. Благодарю. – dvdt

1

I получил ответ. Я узнал, что всякий раз, чтобы получить данные из категорий таблицы в представлении для продуктов, работать не будет. Я, чем ты, показывая категорию в категории, показывает, что просмотр просто работает. С этой идеей в виду, я взял один и тот же код, это один:

приложение/просмотров/категории/show.html.erb

<p> 
    <strong>Name:</strong> 
    <%= @category.category_name %>   <--------this line 
</p> 

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

->NoMethodError в сообщениях # показать

Хорошо, это говорит переменная экземпляра «@category» не доступен для просмотра записи шоу. Изменить это было легко. Я скопировал объект из действия шоу диспетчера категорий в действие show controller.Пример:

class PostsController < ApllicationController 
. 
. 
. 
    def show 
    @post = Post.find(params[:id]) 
    @category = Category.find(params[:id]) 
    end 

И: он работает !!!! Но теперь, что-то не так, чтобы сделать это так?

Cheers.

+0

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

0

Я попробовал еще раз и нашел настоящую ошибку в своем коде. внешний ключ не был установлен Rails. Я должен был сделать это вручную. Таблица, которая имеет «принадлежит_to» (в моем случае столбец posts), требует добавления внешнего ключа (например, category_id).

Первый создания файла миграции:

rails g migration add_foreign_key_to_posts_table 

Второе добавление кода миграции в файл миграции:

class AddForeignKeyToPostsTable < ActiveRecord::Migration 
    def change 
    add_foreign_key :posts, :categories 
    end 
end 

Третий сгребать миграции дб с:

rake db:migrate 

Четвертое добавление внешний ключ для других ресурсов, следуя шагам от одного до трех. Теперь все работает нормально.