NoMethodError в Ruby on Rails - PullRequest
       0

NoMethodError в Ruby on Rails

0 голосов
/ 21 июля 2010

Я столкнулся со следующей ошибкой при попытке создать приложение для ведения блога.Есть идеи почему?


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">

Из моего ограниченного понимания я пытаюсь сказать, что в таблице базы данных моей статьи нет поля 'title', однако, как вы можете видеть из описания нижеОчистить поле 'title'!

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)

Справка?!

Бернард

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

Ответы [ 2 ]

5 голосов
/ 21 июля 2010

Я думаю, вы пытаетесь получить доступ к элементу заголовка прямо из массива.Вам нужно будет перебрать каждый из объектов, прежде чем вы сможете получить доступ к свойствам.

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) 
1 голос
/ 21 июля 2010

Похоже, что вы присваиваете пустой массив @article в вашем контроллере. Вместо этого он должен быть экземпляром Article (если это название вашей модели). Вы можете вставить свой код контроллера?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...