02.05 8-3 額外作業:讓My Post 裡面的編輯跟刪除可以使用

https://fullstack.xinshengdaxue.com/posts/88
這一節的額外作業,實作“My Post” 裡面的編輯跟刪除功能,一開始以為很簡單,實作後發現坑也不少。因此把過程記錄下來。

思路:

  1. Post 裡面的編輯跟刪除功能就是要改CRUD
  2. 要改的檔案有『Controller 、Routes、HTML』
  3. 雖然是"My Post" 裡面的功能,但要改的應該是外面的Post_Controller ,而不是Account 裡面的

步驟 (共三步)
A. app/controller/posts_controller.rb

增加 edit, update, detroy 這三組

def edit
    @group = Group.find(params[:group_id])
    @post = Post.find(params[:id])
    @post.group = @group
  end

  def update
    @group = Group.find(params[:group_id])
    @post = Post.find(params[:id])
    @post.group = @group
    @post.user = current_user

    if @post.update(post_params)
  redirect_to account_posts_path, notice: "編輯成功"
else
  render :edit
end
  end

  def destroy
    @group = Group.find(params[:group_id])
    @post = Post.find(params[:id])
    @post.group = @group
    @post.destroy
    flash[:alert] = "Post deleted"
    redirect_to account_posts_path
  end

Note: 我一直做錯的是“redirect_to account_posts_path ”,不是打錯字,就是搞不清楚路徑怎麼設

B. config/routes.rb 在'root...'後面增加一行

 root 'groups#index'
  + resources :posts

C. view 裡面增加edit.html.erb 不過我為了以後好改,又增加了_&form.html.erb

C1 touch app/views/posts/_form.html.erb

<%= simple_form_for [@group, @post] do |f| %>
  <div class="form-group">
    <%= f.input :content, input_html: { class: "form-control"} %>
  </div>
  <%= f.submit "Submit", class: "btn btn-primary", data: { disable_with: "Submitting..." } %>
<% end %>

Note: 這裡有個坑是<%= simple_form_for [@group, @post] do |f| %> 雖然只是改Post,但是是改在Group 裡面的。所以要@兩次

C2 touch app/views/posts/edit.html.erb

<div class="col-md-4 col-md-offset-4">
    <h2>编辑文章</h2>

    <%= render "form" %>
</div>

C3 編輯 app/views/posts/new.html.erb

<h2 class="text-center">新增文章</h2>

    <%= render "form" %>
</div>

總結:這個作業學到的有三點

  1. 要改Post_Controller 而不是 Controller/Account/下面的Post_Controller
  2. 要改Controller, Routes, HTML (回去看了CRUD的概念)
  3. Group 跟 Post 的巢狀關係(還是似懂非懂)

Comments

comments powered by Disqus