【问题标题】:Unable to delete record, user无法删除记录,用户
【发布时间】:2025-05-25 16:50:01
【问题描述】:

我正在尝试使用删除操作进行删除。但是每当我点击链接时,我都会转到用户个人资料。

用户控制器

class UsersController < ApplicationController

   filter_resource_access

  # GET /users
  # GET /users.xml
  def index
    @users = User.all

    respond_to do |format|
      format.html # index.html.erb
      format.xml  { render :xml => @users }
    end
  end

  # GET /users/1
  # GET /users/1.xml
  def show
    #@user = User.find(params[:id])

    respond_to do |format|
      format.html # show.html.erb
      format.xml  { render :xml => @user }
    end
  end

  # GET /users/new
  # GET /users/new.xml
  def new
    #@user = User.new

    respond_to do |format|
      format.html # new.html.erb
      format.xml  { render :xml => @user }
    end
  end

  # GET /users/1/edit
  def edit
    #@user = User.find(params[:id])
  end

  def create
    #@user = User.new(params[:user])
    @user.channels << Channel.find(1)

    respond_to do |format|
      if @user.save
        format.html { redirect_to(:channels, :notice => 'Registration successfully.') }
        format.xml { render :xml => @user, :status => :created, :location => @user }
      else
        format.html { render :action => "new" }
        format.xml { render :xml => @user.errors, :status => :unprocessable_entity }
      end
    end
  end

  def profile
    @user = User.find(params[:id])
  end



  # PUT /users/1
  # PUT /users/1.xml
  def update
  #@user = current_user

    respond_to do |format|
      if @user.update_attributes(params[:user])
        format.html { redirect_to(@user, :notice => 'User was successfully updated.') }
        format.xml  { head :ok }
      else
        format.html { render :action => "edit" }
        format.xml  { render :xml => @user.errors, :status => :unprocessable_entity }
      end
    end
  end

  # DELETE /users/1
  # DELETE /users/1.xml
  def destroy
    @user = User.find(params[:id])
    @user.destroy
    respond_to do |format|
      format.html { redirect_to(users_url) }
      format.xml  { head :ok }
    end
  end

  def delete
    @user = User.find(params[:user_id])
    @user.destroy
    redirect_to :users
  end

end

索引用户视图

<h1>Listing users</h1>
<p id="notice"><%= notice %></p>
<table>
  <tr>
    <th>Username</th>
    <th>First Name</th>
    <th>Last Name</th>
    <th>Telephone</th>
    <th>Email</th>
    <th></th>
    <th></th>
    <th></th>
  </tr>

<% @users.each do |user| %>
  <tr>
    <td><%= user.login %></td>
    <td><%= user.first_name %></td>
    <td><%= user.last_name %></td>
    <td><%= telephone_field_tag :phone, user.telephone ,:disabled => true %></td>
    <td><%= email_field_tag :email, user.email, :disabled => true %></td>
    <td><%= link_to 'View Profile', user %></td>
    <td><%= link_to 'Edit Profile', edit_user_path(user) if permitted_to? :update ,user %></td>
    <%if permitted_to? :delete ,user   %>
    <td><%= link_to 'Close Account', user, :method => :delete, :confirm => "Are you sure?" %></td>
    <% end %>
  </tr>
<% end %>
</table>

<br />

<%= link_to 'New User', new_user_path %>

【问题讨论】:

  • 谢谢大家,顺便说一句,我正在使用 rails 3,可能会是一个漫长的夜晚。没有js经验

标签: ruby-on-rails activerecord ruby-on-rails-3 authlogic


【解决方案1】:

您使用 Rails 3 的机会很大,对吧?这是一个常见的问题。在 rails 2.x 中,link_to 帮助器用于创建凌乱的内联 javascript,以创建通过适当的 delete 调用提交的表单(有点,但足以解释此解释)。

然而,在 Rails 3 中,实际执行此操作的 javascript 已从视图本身移到 javascript 文件中。这被称为“不显眼的”javascript,其中 HTML 源代码严格用于文档结构,而文档行为存在于其他地方。

最重要的是,您的布局需要在 &lt;head&gt; 部分中包含这些文件,如下所示:

<%= javascript_include_tag :all %>

这应该可以解决您的问题。

【讨论】:

【解决方案2】:

如果您使用的是 Rails 3:旧的 link_to delete 内容不再像以前那样工作了。

现在都是 UJS。我会确保您包含所有 javascript 好东西,无论是基于默认原型的东西还是使用 jquery ones,如果这更符合您的风格。

另外,请确保您的布局中有 csrf_meta_tagmore...

【讨论】:

  • 我做了 "你确定吗?" %> 它会删除我数据库中的每个用户
【解决方案3】:

如果您尝试使用 Rails 3 执行此操作,您可能应该read this SO question

如果您尝试使用 Rails 2 执行此操作,一些日志会帮助我们帮助您。

【讨论】: