参数没有定义

时间:2016-01-27 16:31:25

标签: ruby-on-rails ruby post network-programming vagrant

我正在做一个API应用程序,我有一个POST路由:

{
    "user_id":"1"
}

这条路线调用我的控制器的方法:

def shouts
  puts(params)
  @user = User.find_by_id(params[:user_id])
  render json: {status: 0, message: "sucess", data: @user.yells}
end

当我在我的机器上测试邮递员运行顺利时,会发生什么。并且有可能伴随puts终端:

Started POST "/api/shouts" for 10.0.2.2 at 2016-01-27 16:11:16 +0000
Cannot render console from 10.0.2.2! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255
Processing by Api::YellsController#shouts as */*
  Parameters: {"user_id"=>"1", "yell"=>{"user_id"=>"1"}}
{"user_id"=>"1", "controller"=>"api/yells", "action"=>"shouts", "yell"=>{"user_id"=>"1"}}
  User Load (0.3ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = $1 LIMIT 1  [["id", 1]]
  Yell Load (0.5ms)  SELECT "yells".* FROM "yells" WHERE "yells"."user_id" = $1  [["user_id", 1]]
  Category Load (0.4ms)  SELECT "categories".* FROM "categories" INNER JOIN "categories_yells" ON "categories"."id" = "categories_yells"."category_id" WHERE "categories_yells"."yell_id" = $1  [["yell_id", 1]]
Completed 200 OK 

然而,当testo在同一个网络中的另一台机器上时,停止没有任何东西,甚至没有:

Started POST "/api/shouts" for 10.0.2.2 at 2016-01-27 16:09:04 +0000
Cannot render console from 10.0.2.2! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255
Processing by Api::YellsController#shouts as */*
{"controller"=>"api/yells", "action"=>"shouts"}
  User Load (0.3ms)  SELECT  "users".* FROM "users" WHERE "users"."id" IS NULL LIMIT 1
Completed 500

任何人都知道这会发生什么事吗?如何解决?这是我必须在我的流浪汉机器中设置的东西吗?还是在服务器上?还是铁轨上的红宝石?

更新

我发现我在邮递员的电话中错误地输入了Content-Type Header = aplicatio / json。

有没有办法在ruby on rails上预先配置它?假设所有呼叫都具有相同的标题。

3 个答案:

答案 0 :(得分:1)

Rails限制终端中远程计算机的详细日志输出。

这就是错误的原因:

Cannot render console from 10.0.2.2! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255

但实际上params还可以。您可以在控制器中正常使用它。

无论如何,如果您想为另一台计算机提供相同的详细日志,则可以将development.rb文件中的IP列入白名单。

config.web_console.whitelisted_ips = '10.0.2.2'

答案 1 :(得分:1)

您可以在应用程序控制器中添加类似的内容:

before_filter :set_format

def set_format
  request.format = 'json' # Or whatever you want
end

或在您的routes.rb

resources :shouts, defaults: { format: 'json' }

答案 2 :(得分:0)

看起来可能仅限于本地主机。尝试像这样运行rails服务器以允许外部连接。

rails server -b 0.0.0.0