通过params传递user_id然后检查控制器中的user_id不起作用

时间:2011-11-06 18:31:04

标签: ruby-on-rails

我的事件控制器中有一个remove_attendee操作。我传递给用户的user_id以删除和:要从中移除用户的事件的ID。

基本上,我想仔细检查要求删除的用户是current_user。您应该只能从活动中删除自己。我的路线设置如下:

post "/remove_attendee/:user_id" => "events#remove_attendee", :as=>:remove_attendee

然后我将current_user.id传递给:user_id:

<%= button_to 'Decline Event', remove_attendee_event_path(:user_id => @current_user.id), 
                                                              :method => :post,
                                                              :class => "button" %>

但是,当我在事件控制器中仔细检查:user_id == current_user.id时,它不起作用:

def remove_attendee
    session[:return_to] = request.referrer
    @event = Event.find(params[:id])
    if params[:user_id] == current_user.id
      if @event.remove_attendance(params[:user_id])
        flash[:success] = "User removed from event."
      else
        flash[:error] = "Could not remove user"
      end
    else
      flash[:error] = "Could not remove user"
    end
    redirect_to session[:return_to]
  end

我最终希望事件所有者(@ event.owner_id)能够删除与会者......但这是打破的部分。它应该工作......我正在检查我刚刚通过的值。我把一些调试信息放在:

def remove_attendee
    session[:return_to] = request.referrer
    @event = Event.find(params[:id])
    flash[:pass] = false
    flash[:test1] = params[:user_id]
    flash[:test2] = current_user.id
    if params[:user_id] == current_user.id
      flash[:pass] = true
      if @event.remove_attendance(params[:user_id])
        flash[:success] = "User removed from event."
      else
        flash[:error] = "Could not remove user"
      end
    end
    redirect_to session[:return_to]
  end

在运行remove_attendee后重新加载页面时,:pass = false,:test1 = 1,:test2 = 1.

这怎么可能没有通过?

1 个答案:

答案 0 :(得分:3)

我想我明白了。 params [:user_id]是一个字符串,因此它不等于current_user.id这是一个整数。所以我这样做了:

params[:user_id].to_i == current_user.id

这很有用!