1.创建项目
rails new blog
2.创建数据库
cd blog rails g scaffold Post title:string user:string content:text rails g scaffold Comment body:text user:string post:references rake db:migrate
3.指定主页
config/routes.rb中增加
root :to => 'posts#index'
删除public中的index.html文件
4.将post和comment两张表关联起来
app/model/post.rb中
has_many :comments, :dependent => :destroy
app/model/comment.rb中
belongs_to :post
config/routes.rb将
resources :comments resources :posts
修改为:
resources :posts do resources :comments, :only => [:create, :index] end resources :comments
这样修改后可以在post页面中追加若干个comments
5.增加限制
model/post.rb中
validates_uniqueness_of :title #不允许重复 validates_presence_of :title, :content, :user #不允许为空
Model/comment.rb中
validates_presence_of :post, :body, :user
6.增加comment的new和edit页面中的post的下拉选择框
将app/views/comments/_form.html.erb
<div class="field"> <%= f.label :post %><br /> <%= f.text_field :post %> </div>
改为
<div class="field"> <%= f.label :post %><br /> <%= f.collection_select :post_id, Post.all, :id, :title %> </div>
7.给文章增加评论功能
App/posts/show.html.erb中追加
<% unless @post.comments.empty? %> <div id="comments"> <h3>Comments (<%= @post.comments.length %>)</h3> <% @post.comments.each do |comment| %> <%= comment.user %> say: <%= simple_format(comment.body) %> <% end %> </div> <% end %> <%= form_for [@post, Comment.new] do |f| %> <div id="comments"> <h3>New Comment</h3> <p> <%= f.label :user %><br /> <%= f.text_field :user %> </p> <p> <%= f.label :body %><br /> <%= f.text_area :body, :rows => 10 %> </p> <%= f.hidden_field :post_id, :value => @post.id %> <p><%= f.submit "Add Comment" %></p> </div> <% end %>
8.修改comment页面中post的显示
将index和show页面中的comment.post改为comment.post.title
9.修改追加comment后的跳转
Controllers/comments_controller.rb
将create函数中的创建成功后的跳转改到所在的post的show页面中
def create @comment = Comment.new(params[:comment]) respond_to do |format| if @comment.save format.html { redirect_to @comment.post, notice: 'Comment was successfully created.' } format.json { render json: @comment, status: :created, location: @comment } else format.html { render action: "new" } format.json { render json: @comment.errors, status: :unprocessable_entity } end end end
10.给文章的题目增加链接
例1
将<td><%= post.title %></td>改为
<td><%= link_to post.title, post %></td>
例2
将<td><%= comment.post.title %></td>改为
<td><%= link_to comment.post.title, comment.post %></td>
11.增加创建和修改post的简单权限(在创建、修改或删除前需要先登录)
Controllers/posts_controller.rb
before_filter :authenticate, :except => [:index, :show] private def authenticate authenticate_or_request_with_http_basic do |name, password| name == "admin" && password == "password" end end