一、Demo_app(利用脚手架创建):

1.修改Gemfile
source'https://rubygems.org'

ruby'1.9.3'
gem'rails','4.0.0'
group:developmentdo
gem'sqlite3','1.3.8'
end
gem'sass-rails','4.0.0'
gem'uglifier','2.1.1'
gem'coffee-rails','4.0.0'
gem'jquery-rails','2.2.1'
gem'turbolinks','1.1.1'
gem'jbuilder','1.0.2'
group:docdo
gem'sdoc','0.3.20',require:false
end
group:productiondo
gem'pg','0.15.1'
end


2.在本地安装gem 时指定--withoutproduction选项不安装生产环境所需的gem

$ bundle install --without production
$ bundle update
$ bundle install
(再次提醒,如果Bundler 提示一个和readline有关的错误,请在Gemfile中加入gem rb-readline)

3.然后初始化一个Git 仓库,做第一次提交

$ git init
$ git add .
$ git commit -m "Initial commit"

4.你可以重新创建一个仓库然后将代码推送到GitHub(前提是设好ssh

$ git remote add origin https://github.com/<username>/demo_app.git
$ git push -u origin master

5.利用脚手架创建(用户)

$ rails generate scaffold User name:string email:string
 
  
6.rake迁移数据库
bundle exec rake db:migrate
ps

运行rake -T db来查看所有和数据库有关的任务:

$ bundle exec rake -T db

如果要查看所有的Rake 任务,运行

$ bundle exec rake -T
 
  
 
  
7.rails s 启动服务器




二,自行创建simple_app

1.Gemfile

在默认中加入

group :development, :test do

gem 'sqlite3', '1.3.8'

gem 'rspec-rails', '2.13.1'

end

2.$ bundle install


3.动态生成安全权标

config/initializers/secret_token.rb

require'securerandom'
defsecure_token
token_file=Rails.root.join('.secret')
ifFile.exist?(token_file)
# Use the existing token.
File.read(token_file).chomp
else
# Generate a new token and store it in token_file.
token=SecureRandom.hex(64)
File.write(token_file,token)
token
end
end
 
  
SampleApp::Application.config.secret_key_base=secure_token

4. 接着我们要设置一下让Rails 使用RSpec 而不用Test::Unit。这个设置可以通过rails generate rspec:install命令实现:

$ rails generate rspec:install

5. 然后剩下的就是初始化Git 仓库了:3

$ git init
$ git add .
$ git commit -m "Initial commit"

6.新建一个从分支

git checkout –bstatic-pages

7..生成StaticPages 控制器

$ rails generate controller StaticPages home --no-test-framework
(旁注3.2:撤销操作3.2)




7.创建页面需要的注意的

Route里面的东西写。

Controller里面加上Action

Html.erb中写内容


8.可能会用到嵌入式ruby

<%provide(:title,'Home')%>
<%=yield(:title)%>

类似于jsp

9.为了提取出相同的结构,Rails提供了一个特别的布局文件,叫做application.html.erb

默认的

<!DOCTYPE html>

<html>

<head>

<title>SimpleApp2</title>

<%= stylesheet_link_tag   "application", media: "all", "data-turbolinks-track" => true %>

<%= javascript_include_tag "application", "data-turbolinks-track" => true %>

<%= csrf_meta_tags %>

</head>

<body>

<%= yield %>

</body>

</html>

注意:默认的Rails 布局文件包含几行特殊的代码:

<%=stylesheet_link_tag...%>
<%=javascript_include_tag"application",...%>
<%=csrf_meta_tags%>

这些代码会引入应用程序的样式表和JavaScript 文件(asset pipeline 的一部分);Rails 中的csrf_meta_tags方法是用来避免跨站请求伪造cross-siterequest forgeryCSRF,一种网络***)的

10.提交git并合并到master

$ git add .
$ git commit -m "Finish static pages"
$ git checkout master
$ git merge static-pages

1.创建一个新分支:

$ git checkout -b filling_pages
 
  
<header class="navbar navbar-fixed-top navbar-inverse">
<div>
<div>
<%=link_to"sample app",'#',id:"logo"%>
<nav>
<ul class="nav pull-right">
<li><%=link_to"Home",'#'%></li>
<li><%=link_to"Help",'#'%></li>
<li><%=link_to"Sign in",'#'%></li>
</ul>
</nav>
</div>
</div>
</header>
 
  

我们为header标签指定了三个CSS class3navbarnavbar-fixed-topnavbar-inverse,用空格分开:

<headerclass="navbar navbar-fixed-top navbar-inverse">
<%=link_to"Sign up now!",'#',class:"btn btn-large btn-primary"%>
注意:两个里面的class后面跟的不一样
2.Bootstrap Twitter 开发的框架,可以方便的把精美的Web 设计和用户界面元素添加到使用HTML5 开发的应用程序中
gem'bootstrap-sass','2.3.2.0'

像往常一样,运行bundle install安装Bootstrap

$ bundle install

3.添加一行代码,兼容 Asset Pipeline   config/application.rb

classApplication<Rails::Application
.
config.assets.precompile+=%w(*.png *.jpg *.jpeg *.gif)
end
 
  
创建custom.css.scss
@import “bootstarp”
 
  
重启服务器
~~~Git所有的并合并

3.User模型

rails generate model User name:string email:string
rake db:migrate
4.增加字段age
rails generate migration add_index_to_users_email
修改文件add_column :users, :age, :string
 
  
修改文件add_column :users, :telephone, :string
 
  
Rails.env显示的rails当前的环境


Ps:如何使用gravator头像

http://rubydoc.info/gems/gravatar_p_w_picpath_tag/1.1.3/frames


健壮参数:

我们需要paramsHash 包含:user元素,而且只允许传入nameemailpasswordpassword_confirmation属性。所需代码如下:

params.require(:user).permit(:name,:email,:password,:password_confirmation)
 
  
一个很强大的密码保护方式:(仅仅只要一句话)

has_secure_password

注意两个:

@user.errors.any?

@user.errors.full_messages

Flash{success:’’,error:’dfs’}

注:

Users 资源对应的路由

HTTP 请求

URL

动作

具名路由

作用

GET

/users

index

users_path

显示所有用户的页面

GET

/users/1

show

user_path(user)

显示某个用户的页面

GET

/users/new

new

new_user_path

创建(注册)新用户的页面

POST

/users

create

users_path

创建新用户

GET

/users/1/edit

edit

edit_user_path(user)

编辑id  1 的用户页面

PATCH

/users/1

update

user_path(user)

更新用户信息

DELETE

/users/1

destroy

user_path(user)

删除用户

关于登录功能

1.首先我们要生成Sessions控制器

rails generate controller Sessions --no-test-framework

我们要生成记忆权标属性,执行如下命令:

$ rails generate migration add_remember_token_to_users
classAddRememberTokenToUsers<ActiveRecord::Migration
defchange
add_column:users,:remember_token,:string
add_index:users,:remember_token
end
end
rake db:migrate

我们添加了一个回调函数,在用户存入数据库之前生成记忆权标:

before_create:create_remember_token

2.Active Record 是把模型的属性和数据库表中的列对应的,如果不指定self的话,我们就只是创建了一个名为remember_token的局部变量而已,这可不是我们期望得到的结果。加上self之后,赋值操作就会把值赋值给用户的remember_token属性,保存用户时,随着其他的属性一起存入数据库。

cookies[:remember_token]={value:remember_token,
expires:20.years.from_now.utc}

因为开发者经常要把cookie 的失效日期设为20 年后,所以Rails 特别提供了permanent方法,前面处理cookie 的代码可以改写成:

cookies.permanent[:remember_token]=remember_token

3.关于更新功能

事前过滤器(beforefilter实现访问限制。

Before_action :method_name{:edit,:update}

Gemfile中加入faker

#encoding:utf-8

namespace :db do

desc"Fill database with sample data"

taskpopulate: :environment do

User.create!(name:"实力用户",

email: "example@www.org",

password: "foobar",

password_confirmation: "foobar")

99.timesdo |n|

name  = Faker::Name.name

email ="example-#{n+1}@www.org"

password  = "111111"

User.create!(name:name,

email: email,

password: password,

password_confirmation: password)

end

end

end

$ bundle exec rake db:reset//重置
$ bundle exec rake db:populate
$ bundle exec rake test:prepare//

关于分页

gem'will_paginate','3.0.4'
gem'bootstrap-will_paginate','0.0.9'
 
  
bundle install
页面
<%= will_paginate %>
Controller里面
User.paginate(page:params[:page])
 
  
添加管理员
注意这些代码吧

def sign_in(user)

remember_token=User.new_remember_token

cookies.permanent[:remember_token] = remember_token

user.update_attribute(:remember_token,User.encpty(remember_token))

self.current_user=user

end

def signd_in?

!current_user.nil?

end

def current_user=(user)

@current_user=user

end

# 当前的用户

def current_user

remember_token=User.encpty(cookies[:remember_token])

@current_user||=User.find_by(remember_token:remember_token)

end


def current_user?(user)

user == current_user

end

加上微博

Model ,add index ,migrate date

表格10.1:用户和微博关联后所得方法的简介

方法

作用

micropost.user

返回该微博对应的用户对象

user.microposts

返回该用户的所有微博数组

user.microposts.create(arg)

创建一篇微博(user_id = user.id

user.microposts.create!(arg)

创建一篇微博(失败时抛出异常)

user.microposts.build(arg)

生成一个新的微博对象(user_id  = user.id



classMicropost<ActiveRecord::Base
belongs_to:user
#倒序输出博客
default_scope->{order('created_at DESC')}
validates:user_id,presence:true
end

spacer.gif类似效果的代码:

<li>

         <p><%=f.label :login, "帐号:" %>

           <%= f.text_field:login, :placeholder =>"用户名或邮箱"%></p>

       </li>


       <li><%=f.label :password, "密码:" %>

         <%=f.password_field :password %>

</li>