未定义的方法'每个' for Book in Rails

时间:2017-04-26 12:48:41

标签: ruby-on-rails activerecord

这是我的控制器名为static_pages: -

class StaticPagesController < ApplicationController #StaticPagesController is a ruby class that inherits from ApplicationController
  def home
  end

  def genre
    @genre=Genre.all

    @book=Book.find_by(genre_id:1)
  end

  def accessories
  end

  def aboutus
  end

  def contactus
  end
end
#home, genre and accessories are actions of the controller

这是我的观点流派genre.html.erb:

<% @genre.each do|genre|%>
                <tr>
                    <td><%=genre.genre_id %></td>
                    <br>
                    <td><%=genre.genre_name %></td>
                    <br>
                    <td><%=genre.description %></td>
                    <br>
                    <br>
                </tr>
<% end %>

<% @book.each do|book|%>
                <tr>
                    <td><%=book.book_name %></td>
                    <br>
                    <td><%=book.pages %></td>
                    <br>
                    <td><%=book.stock %></td>
                    <br>
                    <td><%=book.synopsis %></td>
                    <br>
                    <td><%=book.mrp%></td>
                    <br>
                    <td><%=book.author %></td>
                    <br>
                    <td><%=book.publisher %></td>
                    <br>
                    <td><%=book.rating %></td>
                    <br>
                    <td><%=book.genre_name%></td>
                    <br>
                    <td><%=book.discount %></td>
                    <br>
                    <br>
                </tr>
<% end %>

打开流派视图时,我收到了图书部分的错误。它说未定义的方法`每个&#39;对于#Book:0x007f014ab326d8。 我不确定为什么我会收到此错误,因为我复制了从类型部分粘贴的内容并且没有显示错误,所以为什么会这样?

2 个答案:

答案 0 :(得分:1)

 def genre
   @genre=Genre.all
   @books =Book.where(genre_id:1)
 end

这里Book.where将作为集合返回

答案 1 :(得分:0)

根据here

中的文档

<强> find_by -

find_by方法查找匹配某些条件的第一条记录。例如:

所以基本上它会将查询结果限制为只有1条记录,并且每种方法都可以处理记录集合

SELECT "books".* FROM "books" WHERE "books"."genre_id" = $1 LIMIT 1[["genre_id", 1]]

如果我使用 Book.where(genre_id:1)

触发的查询是SELECT "books".* FROM "books" WHERE "books"."genre_id" = $1 [["genre_id", 1]]