我尝试创建一个form_for,接受current_users密码以删除其中一个项目。基本上,删除过程并不需要了解该用户的任何信息。只是确保他们打算删除项目的确认步骤。我的表格应该是什么样的?它不必是form_for它也可以是form_tag。
当前观点:
<div class="modal">
<h2>Confirm Project Deletion</h2>
<%= form_for @user, url: new_account_path, method: :delete, do |f| %>
<%= f.submit %>
<% end %>
</div>
我也可以访问@project
,其中包含current_project以及current_user,如您所见。任何帮助都会非常感谢。
答案 0 :(得分:1)
一种相当常见的方法是在所有项目的索引页面上使用删除标记,如下所示:
<% @projects.each do |project| %>
<%= project.title %>
...
<% if current_user.id == project.user_id %>
<%= link_to project, method: :delete, data: { confirm: 'This will delete this project.' } do %>
Delete!
<% end %>
<% end %>
如果只有项目用户只能在索引页面上查看他的项目,那么只需使用link_to方法:: delete,因为用户已经过身份验证。
答案 1 :(得分:0)
假设您的网页中有一个本地变量project
,并且路由如下:
project DELETE /projects/:id(.:format) projects#destroy
然后你可以简单地设置一个表格,如
<%= form_tag project_path(id: project.id), method: :delete do %>
<%= label_tag :password %>
<%= password_field_tag 'password', '' %>
<input value='Delete Project' type='submit' id='submit-form'/>
<% end %>
您需要做的就是将身份验证检查添加到destroy方法:
def destroy
project = Project.find(params[:id])
password = params[:password]
# Do my authentication check here
if @project and authenticated
@project.destroy
respond_to do |format|
format.html { redirect_to projects_url, notice: 'Project was successfully destroyed.' }
end
end
end
就个人而言,我认为如果您实施基于资源的授权机制(例如CanCanCan,它可以与您的身份验证系统一起工作)会更好。这将使您能够设置能够确保current_user只能查看/删除/管理自己的项目的能力(规则),而不需要他们每次想要销毁资源时进行身份验证。