Ruby on Rails中的NoMethodError

mrb*_*rnz 0 ruby ruby-on-rails

我在尝试创建博客应用程序时遇到以下错误.有什么想法吗?


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">
Run Code Online (Sandbox Code Playgroud)

从我有限的理解,它试图告诉我在我的'文章'数据库表中没有'标题'字段,但是你可以从下面的desc看到有一个清晰的'标题'字段!

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)
Run Code Online (Sandbox Code Playgroud)

救命?!

伯纳德

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
Run Code Online (Sandbox Code Playgroud)

Chu*_*ebs 5

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

for @article in @articles do |a|
   <h2><%= a.title %></h2>...
end
Run Code Online (Sandbox Code Playgroud)

只要确保你的控制器......

@articles = Article.find(:all, :conditions => '...')
Run Code Online (Sandbox Code Playgroud)

更新:

这部分代码返回一个集合.

@article = Article.find_all_by_published(params[:id], true) 
Run Code Online (Sandbox Code Playgroud)