使用用户密码删除对象 - Rails

时间:2016-12-07 18:24:51

标签: ruby-on-rails

我尝试创建一个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,如您所见。任何帮助都会非常感谢。

2 个答案:

答案 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只能查看/删除/管理自己的项目的能力(规则),而不需要他们每次想要销毁资源时进行身份验证。