Mostrar nome em vez de ID na tabela de exibição has_many

Eu tentei alguns outros posts semelhantes, mas ainda estou recebendo um erro.

No modelo Posts, tenho um campo category_id. Eu tenho os seguintes modelos:

#Posts model
belongs_to :categories  

#Category model
has_many :posts

No controlador de índice de Posts eu tenho:

@categories = @posts.Category.find(:all, :order => 'categoryname')

Na visão eu tenho:

<% @posts.each do |post| %>
<tr>
<td><%= post.category_id %></td>
<td><%= @categories.categoryname %></td>

<td><%= link_to 'View', post %></td>
<td><%= link_to 'Edit', edit_post_path(post) %></td>
</tr>
<% end %>

Na segunda coluna, estou tentando mostrar o nome da categoria ("nome da categoria") da tabela "Categoria" em vez de "category_id" da tabela de publicações. Estou recebendo um erro:

Método indefinido `Category 'para #ActiveRecord :: Relation: 0x3e1a9b0>

Eu também tentei:

<td><%= post.categories.categoryname %></td>

Mas pegue o mesmo erro.

Assim como:

<td><%= post.category.categoryname %></td>

Qualquer sugestão seria muito apreciada.

questionAnswers(5)

yourAnswerToTheQuestion