Rails接收HTTP POST请求

时间:2015-02-02 15:14:51

标签: ruby-on-rails ruby http

我有一个Rails应用程序,它接收来自NGINX模块的POST请求。请求如下所示:

Parameters: {"name"=>"asdadsasdads", "type"=>"live"}

我想取名字并检查我的数据库是否相同,如果是的话我想给200回,如果不是404。

def publish
  ssss = Ssss.find_by_name(params[:id])
  if ssss.name == params[:name]
    head 200, content_type: "text/html"
  else
    head 404, content_type: "text/html"
  end
end

这给了我一个500内部服务器错误。

如果我删除“ssss.name”并创建一个“:name”(我只是在测试),它会给我一个404.如果我删除“头404,content_type:”text / html“ else语句它给了我200,但是每个请求都会通过,即使它与我的数据库中的不一样。

我不明白这是如何工作的,我很难用谷歌搜索。有谁可以帮助我吗?什么是正确的?

谢谢!

更新1:

def publish
  ssss = Ssss.find_by_name(params[:name])
  if ssss == params[:name]
    head 200, content_type: "text/html"
  else
    head 404, content_type: "text/html"
  end
end

这就是我现在正在使用的。即使它应该没问题,它给了我404!

"name"=>"55b5807bbde1", "type"=>"live"}
Ssss Load (0.1ms)  SELECT  "ssss".* FROM "ssss" WHERE "ssss"."name" = ? LIMIT 1  [["name", "55b5807bbde1"]]

如果我将其改为查找(params [:id]),它会给我一个500

1 个答案:

答案 0 :(得分:0)

在撰写本文时,您的问题似乎是您在变量Ssss中存储了类ssss的对象,然后将此对象与String进行比较。这将返回false,因为对象不属于同一类,将您引入404块。

尝试将Ssss.nameparams[:name]进行比较,看看你得到了什么。