MyTrip 用户可见自己创建全部内容

2019-07-20  本文已影响0人  RealAnalysis

不管是否对外is_hidden了的内容, 都能看到

而且是别人看不到, 用户自己能看到, 还要保障不能被其他用户篡改. 最重要是写正确的controller以及index与show页面, 不然跳转就会报错或乱显示.

这篇就放正确的写法吧. 之前查资料进行调试的试错过程自带思路啥的太冗余了.

首先, account平行世界的 city controller写法

平行世界 city index写法, 就正常显示就好了, 跟教程的admin平行世界一样的写法. 但其中

<%= link_to(city.title, account_city_path(city)) %>

用自己的path也是可以的哦!

平行世界 city show的写法

因为city show就是post的index部分, 所以这里的post部分, 我就用之前的就好咧.

<div class="col-md-12">



  <div class="pull-right">
    <%= link_to("Add a Post", new_city_post_path(@city), class:"btn btn-sm btn-primary") %>
  </div>

  <table class="table">
    <thead>
      <tr>
        <th> Reason </th>
        <th> City </th>
        <th> Last Update </th>
        <th colspan="2"></th>
      </tr>
    </thead>

    <tbody>
      <% @posts.each do |post| %>
      <tr>
        <td>
          <%= render_post_status(@city, post) %>
          <%= link_to(post.address,city_post_path(@city, post) ) %>
        </td>
        <td><%= post.reason %></td>
        <td><%= link_to("Edit", edit_city_post_path(@city, post), class:"btn btn-sm btn-info") %></td>
        <td><%= link_to("Delete", city_post_path(@city, post), method: :delete, class:"btn btn-sm btn-danger") %></td>
      </tr>
      <% end %>
    </tbody>
  </table>
</div>

平行世界 post controller 写法

重点就是post这行, 要在前面加个@city 并且后面是要用复数的posts去进行查找

  def show
    @city = City.find(params[:city_id])
    @post = @city.posts.find(params[:id])
  end

平行世界 post index 的写法

<div class="col-md-12">

  <h2 class="text-center"> 我的攻略 </h2>

  <table class="table">
    <thead>
      <tr>
        <th> Reason </th>
        <th> City </th>
        <th> Last Update </th>
        <th colspan="2"></th>
      </tr>
    </thead>

    <tbody>
      <% @posts.each do |post| %>
        <tr>
          <td>
            <%= render_post_status(post.city, post) %>
            <%= link_to(post.reason, city_post_path(post.city, post)) %>
          </td>
          <td> <%= post.city.title %> </td>
          <td> <%= post.updated_at %> </td>
          <td> <%= link_to('Edit', edit_city_post_path(post.city, post), class: "btn btn-default btn-xs") %></td>
          <td> <%= link_to('Delete', city_post_path(post.city, post), method: :delete, data: { confirm: "Are you sure?" }, class: "btn btn-default btn-xs") %></td>
        </tr>
      <% end %>
    </tbody>
  </table>
</div>

然后account这个平行世界里的city或post的show页面都不重要了, 因为我就使用前台的最原始的版本就好. 能查看到而不被阻拦, 是因为我把原始post controller的show定义的显示条件修改成了

   if @post.is_hidden && @post.user != current_user
      flash[:warning] = "This post is already archieved"
      redirect_to root_path
    end

在city controller的show定义也同理这样修改. 这样写post的用户就能看见自己的文案内容了, 就不用account世界里面开post的show页面了, 虽然account世界的city show还是有必要, 因为毕竟是post的index嘛. 算是用"业务逻辑"删减了要做的功能吧哈哈哈

参考资料 ihower老师的教程

https://ihower.tw/rails/restful-practices.html

上一篇下一篇

猜你喜欢

热点阅读