用Rails4和Angular.js创建搜索功能

参考网站

Ruby和Rails的版本

ruby '2.0.0'
rails', '4.0.1'

使用Rails和Angular.js来创建搜索功能。

重点是搜索结果可以在不刷新页面的情况下立即更新。

在Gemfile文件中添加以下内容。

gem 'angularjs-rails'
gem 'angularjs-rails-resource', '~> 0.2.3'

AngularJS-Rails-Resource是为了使用AngularJS模块中的ngResource而引入的。

创建文件夹和文件。

% > mkdir -p app/assets/javascripts/angular/controllers \
           app/assets/javascripts/angular/services

% > touch app/assets/javascripts/angular/controllers/article_ctrl.js \
                  app/assets/javascripts/angular/services/article.js \
                  app/assets/javascript/app.js

请在application.js中写下以下内容。


//= require jquery
//= require jquery_ujs
//= require turbolinks
//= require angular
//= require angular-resource
//= require app
//= require_tree

请在app.js中填写以下内容。

window.App = angular.module('Ahiru', ['ngResource']);

在 application.html.erb 文件的 HTML 元素中添加以下内容。

<html>  ー> <html ng-app ="Ahiru">

请在 article_ctrl.js 文件中填写以下内容。

var app = angular.module('Ahiru');


app.controller('ArticlesCtrl', [
  '$scope', 'Article', function($scope, Article) {
    return $scope.articles = Article.query();
  }
]);

请在article.js文件中填写以下内容。

var app = angular.module('Ahiru');
app.factory('Article', function($resource) {
  return $resource('/api/articles/:id', {id: '@id'});
});

控制器包括TopController和ArticleController两个。
模型只有Article一个。

请在route.rb文件中写入以下内容。

Ahiru::Application.routes.draw do
  root to: 'top#index'
  scope :api do
    get "/articles(.:format)" => "articles#index"
    get "/articles/:id(.:format)" => "articles#show"
  end

end

制作模型

% > rails g model article title:string content:text 

% > rake db:migrate
class TopController < ApplicationController

  def index
  end

end
class ArticlesController < ApplicationController

  def index
    render json: Article.order("created_at DESC")
  end

  def show
    render json: Article.find(params[:id])
  end

end

我创建了一个名为app/views/top/index.html.erb的文件,并添加了以下内容。


<h2>記事検索</h2>
Search: <input ng-model="query">

  <div ng-controller="ArticlesCtrl">
    </ul>
    <ul>
      <li ng-repeat=" article in articles  | filter:query ">
        <h3>{{ article.title }}</h3>
        <p>({{ article.content }})</p>
      </li>
    </ul>
  </div>

将以下数据输入到seed文件中。

title_name = %w(perl ruby python php java) * 6

0.upto(30) do |idx|
Article.create(
  title: title_name[idx],
  content: "避暑地・鎌倉を訪れた大学生の「私」は、由比が浜で見かけた「先生」に興味を持ちます。\n
           言葉を交わすようになりましたが、「先生」の態度はそっけないものでした。回想の物語で \n
           ある本作を語る「語り手の私」は、「先生の亡くなった今日になって、はじめて」、先生は \n
           自分を嫌っていたわけではなかったとわかりはじめたと振り返ります。"
  )
end
% > rake db:seed

完成绘画

スクリーンショット 2013-12-22 13.47.19.png

结束

广告
将在 10 秒后关闭
bannerAds