我正在尝试使用rails中的current_user帮助程序标记,以便允许登录状态下的用户编辑和删除他们在登录时创建的对象。
上周这似乎对我有用,但是现在我回到了我的应用程序,并且它停止了。我还在显示页面上为编辑功能实现了相同的功能,但是它不起作用。请有人告诉我我要去哪里哪里了,我是否有正确的语法可以使用此功能?预先谢谢你:)
我的index.html.erb文件:
<div class="row justify-content-around p-3">
<% @hairstyles.each do |hairstyle| %>
<div class="card m-3">
<div>
<%= cl_image_tag hairstyle.photo, width: 300, height: 200, crop: :fill, class: 'card-image'%>
</div>
<div class="card-body">
<div class="card2">
<div class="card-body-inner1 transbox">
<h5 class="card-title"><%= link_to hairstyle.name, hairstyle_path(hairstyle) %></h5>
<p>Location: <%= hairstyle.location%></p>
</div>
<div class ="card-body-inner2 d-flex">
<p> Likes</p>
<p> Share</p>
<% if hairstyle.user == current_user%>
<p> <%= link_to "Delete", hairstyle_path(hairstyle), method: :delete, data: { confirm: "Are you sure?" }%></p>
<%end %>
</div>
</div>
</div>
</div>
<% end %>
</div>
我的控制器:
def create
@hairstyle = Hairstyle.create(hairstyle_params)
# @hairstyle.save ? (redirect_to hairstyle_path(@hairstyle)):(render 'new')
@hairstyle.user = current_user
if @hairstyle.save!
redirect_to hairstyle_path(@hairstyle)
else
render 'new'
end
end
答案 0 :(得分:1)
您能否指定停止工作的意思?也许您当前未登录?
为此功能,您还应该使用授权工具,例如pundit。因为现在,您只是在视图中隐藏指向动作的相应链接。但是,如果用户猜测该URL并在浏览器中键入该URL,他们仍然可以删除或编辑其他用户对象。 Pundit的政策概念正是在避免这种情况。
答案 1 :(得分:0)
提示您的代码,使用cancancan gem干燥代码,还有助于集中“安全访问权限”
答案 2 :(得分:0)
根据您的问题,我建议您使用action_access,它易于实现,并且易于为您拥有的每个用户分配编辑,删除或更新的权限。 链接:https://github.com/matiasgagliano/action_access