On 9 March 2016 at 21:51, David Williams <
li...@ruby-forum.com> wrote:
> In my articles model, I created a scope that links categories to their
> respective articles posts. When I use the rails console, the method
> works perfectly when I query the db.
>
> article.rb
>
> scope :category_technology, -> {where(category_id: 1)}
>
> @articles.category_technology
> Article Load (0.5ms) SELECT "articles".* FROM "articles" WHERE
> "articles"."category_id" = ? ORDER BY "articles"."created_at" DESC
> [["category_id", 1]]
>
> Which works.
Is that not just the same as @category.articles assuming that @category has id 1
> _________________________________________________________________________
>
> The problem is that I'm unable to use it in the view and iterate over
> the records with category_id: 1.
>
> What I'd like to do is something like this
> technology_controller.rb
>
> def index
> @technology_articles = Article.category_technology.all.limit(10).last
Again, you would be better to do it the other way around, start with
the category and get the articles from that. Note, however that as
you have coded it you have specifed .last which means that
@technology_articles is only one article, not a collection.
> end
>
> _____________________________________________________________________
>
> In the index.html.erb
>
> <% if @technology_articles.present? %>
> <% @technology_articles.each do |article| %>
> <- omitted ->
> <% end %>
>
> I'm getting undefined method `each' for #<Article:0x8300868>
That is because you only have a single Article, not a collection, see above.
Colin