2015-05-09 67 views
1

我'得到错误无方法错误未定义的方法`找到 '为#<TopFood:0x007fdfd5e0f4e0>

NoMethodError in Data#input 

Showing /home/adijanuarsyah/Projects/Food/app/views/data/_idfood.html.erb 

其中线#8提出:

undefined method `find' for #<TopFood:0x007fdfd558fa90> 

在i'我用find方法获取查询食物= foods.find(rand_number)我得到了上面的错误,但是当使用TopFood.find(rand_number)时,它的工作完美。

这是我的看法

<h2>Suggestion Indonesian top dishes</h2> 
<ul id="foodList"> 

     <% TopFood.where(:country => "ind").find_each do |foods | %> 
     <% rand_number = rand(52) + 1 %> 
      <% @food = foods.find(rand_number)%> 
       <li><%= @food.name %></li> 
      <% puts @food.inspect %> 
    <% end %> 

</ul> 
<div id="loadMore">More sugesstions</div> 
<div id="showLess">Show less</div> 

任何线索,这到底是怎么回事呢?

谢谢。

回答

0

find是一种类方法,它不能在类似foods的实例上调用。

要解决你的代码,你可以这样做:

<% TopFood.where(:country => 'ind', :id => rand(52) + 1).find_each do |food| %> 
    <li><%= food.name %></li> 
    <% puts food.inspect %> 
<% end %> 

如果你想显示在一个随机的顺序,你可以这样做的结果:

如果你的数据库是MySQL的:

<% TopFood.where(:country => 'ind').order('RAND()').find_each do |food| %> 

如果您的数据库是PostgreSQL或SQLite:

<% TopFood.where(:country => 'ind').order('RANDOM()').find_each do |food| %> 
+0

哦,我明白了,需要更多关于班级和实例的学习,现在我得到了结果,但只有一个食物名称结果,如果我想要find_each方法获得我所有的食物名称? –

+0

'find_each'只返回一行,除了你添加一个随机的'id',那也只会匹配一行。你想要做什么?如果你想显示超过1种食物,只需摆脱',:id => rand(52)+ 1'。 – Mischa

+0

我试图获得包含国家字段“ind”的所有食物名称行,但是:id随机,所以食物名称显示动态每个用户加载页面,如果iam使用@food = TopFood.find_by_id(rand_number)它可以显示所有随机的食物名称,但不会显示:country =>'ind' –