Cloud 9 Adapt Project on Heroku (Week V)

Advanced Software Engineering

Week V

--------------- 写在前面 -------------------------

https://moonsea.herokuapp.com/

附上链接,这个是要实现的功能

-------------------------------------------------------------

根据老师上课的要求,强烈建议更换到Cloud 9, 因为是SaaS时代,所以只好从原来的Local转换到Cloud,用起来体验还不错,只是各种环境都需要重新配置,比较烦。还好,有了之前的Blog,配置起来也不是什么难事.接下来就是git clone项目,修改源码。

1.从github同步源码

1 git clone https://github.com/zsmjzlb/zsmjzlb.git

2.进入源码,进行bundle install

1 cd zsmjzlb
2 bundle install

这时候,可能会出现各种问题,最常见的就是提示缺少某个依赖包,只需要根据提示进行安装即可,可以参照"Some Problems about Gem"。

3.install之后,进行数据库迁移

1 rake db:migrate
2 rake db:seed

4.数据库迁移之后,运行

因为是在cloud 9 上,所以使用如下命令

1 rails s -p $PORT -b $IP

-------------------------修改要求-------------------------------

功能1.实现标题点击排序(点击,正序;再点击,逆序)

功能2.实现标题点击变黄

功能3.加入复选框,实现选择查询功能

------------------------进入正题---------------------------------

 因为ruby on rails 是采用MVC框架的一种系统,所以实现一个功能,一般需要从M(model)、V(view)、C(controller)三个层次进行修改实现。

=============  功能1 =======================

(1)首先,V(view)层,修改页面前端显示效果,在”index.html.haml“文件中给标题(title、release date)添加链接,实现点击排序功能

 1  %thead
 2     %tr
 3     - if @selectsort == "title"
 4       %th.hilite= link_to "Movie Title", movies_path(:selectsort=>"title", :sort=>@sorted, :ratings=>params[:ratings])
 5     - else
 6       %th= link_to "Movie Title", movies_path(:selectsort=>"title", :sort=>@sorted, :ratings=>params[:ratings])
 7     %th Rating
 8     - if @selectsort == "release_date"
 9       %th.hilite= link_to "Release Date", movies_path(:selectsort=> "release_date", :sort=> @sorted, :ratings=> params[:ratings])
10     - else
11       %th= link_to "Release Date", movies_path(:selectsort=> "release_date", :sort=> @sorted, :ratings=> params[:ratings])
12     %th More Info

(2)然后,C(controller)层,在“movies_controller.rb”文件中,添加排序的功能,因为两次点击排序不同,所以加入flag(sorted),sorted =1 逆序,sorted =0 顺序

 1 def index
 2     @movies = Movie.all
 3     
 4     @sorted = 0
 5     @selectsort = "waitparams"
 6     if params[:selectsort]
 7       @selectsort = params[:selectsort]
 8       @movies = @movies.sort_by{|movie| movie[@selectsort]}
 9       if params[:sort].to_i == 1
10         @movies = @movies.reverse
11         @sorted = 0
12       else
13         @sorted = 1
14       end
15     end
16   end

(3)M(model)层,这个功能没有用到model层,所以不需要修改

(4)保存,使用如下命令运行访问即可。

1 rails s -p $PORT -b $IP

=============== 功能2 ==========================

实现标题点击变黄,是由css样式来实现的。

因为在功能1中,是通过"th.hilite"来实现点击排序功能,所以只需要在css文件中,将这个标签的背景颜色变成黄色就可以。"default.ss"文件中加入如下代码:

1 table#movies th.hilite {
2     background-color: yellow
3 }

============= 功能3 =============================

实现不同ratring等级的选择查询

(1)首先,V(view)层,在“index.html.haml”页面中加入如下代码

1 -# checkbox
2 =form_tag movies_path, :method => :get do 
3   Rating Rank:
4   - @all_ratings.each do |rating|
5     = rating
6     = check_box_tag "ratings[#{rating}]","1",(@ratings.include? rating)
7   = check_box_tag "ratings[hidden]","1",true,hidden:true
8   = submit_tag "Refresh"

(2)然后,C(controller)层,在“movies_controller.rb”文件的index函数中,加入如下代码

1 @all_ratings = Movie.ratingcollection
2     if params[:ratings]
3       @ratings = params[:ratings].keys
4     else
5       @ratings = @all_ratings
6     end
7     
8     @movies = Movie.where(rating: @ratings)

(3)最后,M(model)层,在“movie.rb”文件中,实现查询功能,代码如下:

1 def Movie.ratingcollection
2         ratingcollect = Array.new
3         i = 0
4         Movie.select(:rating).distinct.each do |movie|
5             ratingcollect[i] = movie.rating
6             i += 1;
7         end
8         return ratingcollect.sort
9     end

(4)保存,运行访问即可。

至此,要求功能就全部实现了。

接下来,将project部署到Heroku,步骤参考“Deploy One Project on Heroku (Week IV)”。

posted @ 2015-11-14 14:05  Moonseazj  阅读(894)  评论(0编辑  收藏  举报