2010-07-20 140 views
0

我在尝试创建博客应用程序时遇到以下错误。任何想法为什么?Ruby on Rails中的NoMethodError


NoMethodError in Articles#show 

Showing app/views/articles/show.html.erb where line #1 raised: 

undefined method `title' for []:Array 
Extracted source (around line #1): 

1: <h2><%= @article.title %></h2> 
2: 
3: <% if @article.category %> 
4: <p class="category"> 

从我有限的了解它试图告诉我,有我在“文章”的数据库表中没有“标题”字段,但是你可以看到从递减下面有克利'标题'字段!

mysql> desc articles; 
+--------------+--------------+------+-----+---------+----------------+ 
| Field  | Type   | Null | Key | Default | Extra   | 
+--------------+--------------+------+-----+---------+----------------+ 
| id   | int(11)  | NO | PRI | NULL | auto_increment | 
| user_id  | int(11)  | YES |  | NULL |    | 
| title  | varchar(255) | YES |  | NULL |    | 
| synopsis  | text   | YES |  | NULL |    | 
| body   | text   | YES |  | NULL |    | 
| published | tinyint(1) | YES |  | 0  |    | 
| created_at | datetime  | YES |  | NULL |    | 
| updated_at | datetime  | YES |  | NULL |    | 
| published_at | datetime  | YES |  | NULL |    | 
| category_id | int(11)  | YES |  | 1  |    | 
+--------------+--------------+------+-----+---------+----------------+ 
10 rows in set (0.01 sec) 

帮助?!

Bernard

Ps。希望上面表格的格式能够保留...在预览中看起来不太好!


相关调用的控制器代码如下。

def show 
if is_logged_in? && @logged_in_user.has_role?('Editor') 
    @article = Article.find(params[:id]) 
else 
    @article = Article.find_all_by_published(params[:id], true) 
end 
respond_to do |wants| 
    wants.html 
    wants.xml { render :xml => @article.to_xml } 
end 
end 
+1

错误提示您已收到整个阵列,您认为自己有数组中的一项。也就是说,一篇文章有​​一个标题,但不是包含所有文章对象的数组。 (我没有使用Rails,但是我记得它在处理单数和复数时有一些神奇的功能,因为这种回忆很模糊,所以请随时忽略它。) – Telemachus 2010-07-20 21:11:02

+0

在这种情况下,请考虑先调试一下发送到论坛:例如输出@ article.class – Alexey 2010-07-21 00:13:07

回答

5

我想你试图直接从数组访问标题元素。在访问属性之前,您需要遍历每个对象。

for @article in @articles do |a| 
    <h2><%= a.title %></h2>... 
end 

只需确保在你的控制器......

@articles = Article.find(:all, :conditions => '...') 

更新

你的这部分代码返回一个集合。

@article = Article.find_all_by_published(params[:id], true) 
+0

嗯...不知道。在我的控制器中,我在Articles数组中搜索特定的ID,并使用该结果填充@articles? @article = Article.find(params [:id]) 认为这将意味着@article将是一个元素,而不是一个数组? – mrbernz 2010-07-21 20:58:59

+0

是的。我只是在猜测。 – 2010-07-21 21:32:15

1

它看起来像你在你的控制器分配一个空阵列@article。它应该是Article的实例(如果这是您的型号名称)。你可以粘贴你的控制器代码吗?

+0

相关控制器代码如下: - def show \t if is_logged_in? ?&& @ logged_in_user.has_role( '编辑') \t \t @article = Article.find(PARAMS [:ID]) \t别的 \t \t @article = Article.find_all_by_published(PARAMS [:ID],真) \t结束 \t respond_to do | want | \t \t wants.html \t \t wants.xml {渲染:XML => @ article.to_xml} \t年底 结束 阿列克谢会喜欢上如何调试Rails代码的指针,此刻我只是去关闭日志文件和Web输出!担心绝对是一个Rails(和编程)newb ... – mrbernz 2010-07-21 20:53:44