不管是否对外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嘛. 算是用"业务逻辑"删减了要做的功能吧哈哈哈
网友评论