3-1-2 产生 groups controller

rails g controller groups

3-1-3 建立 index action 以及 index 的 view

app/controllers/groups_controller.rb
class GroupsController < ApplicationController
+ def index
+   @groups = Group.all
+ end
end

建立index touch app/views/groups/index.html.erb

3-1-4 修改routing

Rails.application.routes.draw do
 + resources :groups
   root 'welcome#index'
end

3-2 将首页换成讨论群一栏表

Rails.application.routes.draw do
   resources :groups
 - root 'welcome#index'
 + root 'groups/index'    
end

4-2-1 建立 new action

app/controllers/groups_controller.rb 加入 new action

app/controllers/groups_controller.rb
class GroupsController < ApplicationController   
+ def new
+   @group = Group.new
+ end
end

4-2-2 建立 new action 的表单

touch app/views/groups/new.html.erb

打开网址 http://localhost:3000/groups/new, 结果如下

此时按下 Submit, 会出现报错

这是因为目前还只是个表单,无法将数据送出后成功建立出一笔讨论版的数据, 缺少 create action
new和create的区别,new执行的是GET(Read)读取功能,create 执行的是POST(Create)实作新增的功能,接收new里的表单送出的信息,变成一笔存在数据库里的数据

4-2-3 建立 create action

app/controllers/groups_controller.rb
+ def create
+   @group = Group.new(groupparams)
+   @group.save
+
+     redirectto groupspath
+ end
+
+ private
+
+ def groupparams
+   params.require(:group).permit(:title, :description)
+ end  

4-3 实作讨论群“浏览“功能

直接点击 index 上的 Title 链接,会出现报错信息

4-3-1 建立 show action

app/controllers/groups_controller.rb
+ def show
+   @group = Group.find(params[:id])
+ end

结果如下

4-4 实作讨论群 ”编辑” 功能

4-4-1 建立 edit action

app/controllers/groups_controller.rb
+ def edit
+  @group = Group.find(params[:id])
+ end

建立 edit action 的表单

touch app/views/groups/edit.html.erb 

打开网页 http://localhost:3000/groups/1/edit

此时点击Submit

此时修改里面的数据,但是无法送出。因为 update 还没实作
edit和update的区别,edit只是产生修改的表单,但是无法更新数据库里的信息。需要实作 update action, 接收edit里的表单送出的信息,才能真正更新存在数据库里的数据 此处,类比 new和create

4-4-4 实作 update action

app/controller/groups_controller.rb
+  def update
+    @group = Group.find(params[:id])
+
+    @group.update(group_params)
+
+    redirect_to groups_path, notice: "Update Success"
+  end

4-5 实作讨论群“删除”功能

此时点击 delete 按钮, 会出现报错信息

4-5-1 建立delete action

app/controllers/groups_controller.rb
+  def destroy
+    @group = Group.find(params[:id])
+    @group.destroy
+    flash[:alert] = "Group deleted"
+    redirect_to groups_path
+  end

https://s3-ap-northeast-1.amazonaws.com/ontrackapp-production/71uhUpUREqB4dKeRyeEA_Screenshot%20at%20Mar%2028%2013-39-47.png

4-6 限制“标题为空”的Group,不能被新增

4-6-1 在 Group model 加入“标题限制”

app/models/group.rb
class Group < ApplicationRecord
    validates :title, presence: true
end

4-6-2 在 groups_controller 里面加入储存失败的判断

app/controllers/groups_controller.rb
+ def create
+ @group = Group.new(group_params)

+  if @group.save
    redirect_to groups_path
+  else
+    render :new  end
+ end