params值是否仅在您调用它的操作中可用? (导轨)

时间:2012-07-29 21:31:27

标签: ruby-on-rails params

我正在我的控制器中使用json对我的创建动作发出POST请求:

{
  "token":"amsdaashdaksjdh" #assume this is a valid token for a user
  "post": {
     "content":"some random text"
     "title":"random title"
   }
}

但是,我有一个before_filter检查,看看User是否在我的数据库中,基于这样的令牌:

before_filter :authenticate


def authenticate
  @user = User.find_by_authentication_token(params[:token])
  if (@user == nil)
    render :json => {error: "invalid token"}
  end
end

总是给我无效的令牌错误......

1 个答案:

答案 0 :(得分:0)

当过滤器返回before_filternil时,Rails false会暂停处理链。由于您的if语句是最后执行的操作,因此当nil不是@user时,过滤器将返回nil,这将停止处理。

您可以添加else块,在找到用户后返回true。

def authenticate
  @user = User.find_by_authentication_token(params[:token])
  if @user.nil?
    render :json => {error: "invalid token"}
    false
  else
    true
  end
end