2015-06-24 4 views
0

Пожалуйста, помогите, не уверен, что я делаю неправильно. Я просто пытаюсь создать простую форму поиска, и я предполагаю, что, возможно, у меня есть ошибка на моих маршрутах, но я не настолько силен при отладке, поскольку я довольно новичок.Rails - неинициализированная постоянная статьяController :: Article

Ошибка -

неинициализированным постоянная ArticlesController :: Статья

routes.rb -

<!DOCTYPE html> 
<head> 
    <title>Simple Search Form</title> 
</head> 
<body> 
    <!-- When submit the form, the view rendered will be the index view of our articles resource --> 
    <%= form_tag(articles_path, :method => "get", class: "navbar-form", id: "search-form") do %> 
    <div class="input-append"> 
     <%= text_field_tag :search, params[:search], class: "span2", placeholder: "Search Articles" %> 
     <!-- In order to have the "search" icon int the button, we need to use plain HTML instead 
      of using a Rails form helper --> 
     <button class="btn" type="submit"><i class="icon-search"></i></button> 
    </div> 
    <% end %> 
    <%= yield %> 
</body> 

articles.rb -

def Article < ActiveRecord::Base 
    attr_accessible :title, :content 

    validates :title, presence: true, uniqueness: true 
    validates :content, presence: true 

    # It returns the articles whose titles contain one or more words that form the query 
    def self.search(query) 
    # where(:title, query) -> This would return an exact match of the query 
    where("title like ?", "%#{query}%") 
    end 
end 

articles_controller.rb *** ЭТО ГДЕ ОШИБКА IS **** Это выдвигает на первый план "@articles = Article.order (" create_at DESC ")"

class ArticlesController < ApplicationController 
    def index 
    if params[:search] 
     @articles = Article.search(params[:search]).order("created_at DESC") 
    else 
     **@articles = Article.order("created_at DESC")** 
    end 
    end 
end 

index.html.erb -

<% @articles.each do |article| %> 
    <div class="article"> 
    <h1 class="article-title"><%= link_to article.title, article %></h1> 
    <p class="article-content"><%= article.content %></p> 
    </div> 
<% end %> 

application.html.erb -

<!DOCTYPE html> 
<head> 
    <title>Simple Search Form</title> 
</head> 
<body> 
    <!-- When submit the form, the view rendered will be the index view of our articles resource --> 
    <%= form_tag(articles_path, :method => "get", class: "navbar-form", id: "search-form") do %> 
    <div class="input-append"> 
     <%= text_field_tag :search, params[:search], class: "span2", placeholder: "Search Articles" %> 
     <!-- In order to have the "search" icon int the button, we need to use plain HTML instead 
      of using a Rails form helper --> 
     <button class="btn" type="submit"><i class="icon-search"></i></button> 
    </div> 
    <% end %> 
    <%= yield %> 
</body> 

ответ

2

В articles.rb у вас есть

def Article < ActiveRecord::Base 

и вы должны иметь

class Article < ActiveRecord::Base 

Тогда вы должны быть хорошо идти.

+0

имеет значение порядок? первый класс идет первым? –

+0

Ну, это дело не в порядке ... 'def', если для определения метода внутри класса. Так что ошибка говорит вам, что он не может найти этот класс статьи, потому что вы используете 'def' и не создаете новый класс. Ваша модель в основном является классом, который наследуется от ActiveRecord :: Base – Ross

1

Ваш код должен создать новый класс. Прямо сейчас вы создаете метод, который каким-то образом наследуется от ActiveRecord.

Это (в article.rb):

def Article < ActiveRecord::Base 
end 

Должно быть:

class Article < ActiveRecord::Base 
end 
+0

Итак, удалите «def» в основном и замените его «классом»? –

+0

Да. Прямо сейчас ваш ArticleController пытается связаться с чем-то, что было установлено как нечто иное, чем класс. Также, пожалуйста, подумайте о принятии моего ответа, если это вам поможет. –

Смежные вопросы