美文网首页
MyTrip 用户可见自己创建全部内容

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

作者: RealAnalysis | 来源:发表于2019-07-20 21:12 被阅读0次

    不管是否对外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

    相关文章

      网友评论

          本文标题:MyTrip 用户可见自己创建全部内容

          本文链接:https://www.haomeiwen.com/subject/ejsylctx.html