- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 ActiveResource 和 Json 从 Rails3 客户端在 MongoDB/Sinatra 服务器中创建一个新的“用户”,并且发送的对象主体或哈希为空。在 Rails3 中,我创建了一个“用户”模型,并使用 Rails 控制台对 Sinatra 服务器进行了 ActiveResource 调用。服务器正确读取 URL,但似乎没有参数与对象一起传递。有人可以告诉我他们对我错过了什么或为什么我没有得到正确输出的想法吗?
Sinatra 服务器使用 Ruby 1.8.7。
Rails3 客户端使用 Ruby 1.9.2。
从 Rails3 客户端用户模型:
class User < ActiveResource::Base
self.site = "http://127.0.0.1:9393/"
self.collection_name = "user/add"
self.format = :json
end
u=User.new(:first_name=>"Bill",:last_name=>"Smith")
=> #<User:0xa8d7fac @attributes={"first_name"=>"Bill", "last_name"=>"Smith"}, @prefix_options={}>
u.save
=> True
#<Api:0xb6ee4e70 @block_params=[], @result={"status"=>200, "error"=>nil}, @params={}, @observer_state=true, @request=#<Sinatra::Request:0xb6ee4e0c @params={}, @route="/user/add.json", @env={"HTTP_HOST"=>"127.0.0.1:9393", "HTTP_ACCEPT"=>"*/*", "SERVER_NAME"=>"127.0.0.1", "REQUEST_PATH"=>"/user/add.json", "rack.url_scheme"=>"http", "HTTP_USER_AGENT"=>"Ruby", "REMOTE_HOST"=>"localhost", "CONTENT_LENGTH"=>"50", "rack.errors"=>#<Rack::Lint::ErrorWrapper:0xb6ee5294 @error=#<IO:0xb77e955c>>, "SERVER_PROTOCOL"=>"HTTP/1.1", "CONTENT_TYPE"=>"application/json", "rack.version"=>[1, 1], "rack.run_once"=>false, "SERVER_SOFTWARE"=>"WEBrick/1.3.1 (Ruby/1.8.7/2011-02-18)", "REMOTE_ADDR"=>"127.0.0.1", "PATH_INFO"=>"/user/add.json", "SCRIPT_NAME"=>"", "HTTP_VERSION"=>"HTTP/1.1", "rack.multithread"=>true, "rack.multiprocess"=>false, "REQUEST_URI"=>"http://127.0.0.1:9393/user/add.json", "rack.request.query_hash"=>{}, "SERVER_PORT"=>"9393", "REQUEST_METHOD"=>"POST", "rack.request.query_string"=>"", "rack.input"=>#<Rack::Lint::InputWrapper:0xb6ee52d0 @input=#<StringIO:0xb76fbeb0>>, "HTTP_CONNECTION"=>"close", "QUERY_STRING"=>"", "GATEWAY_INTERFACE"=>"CGI/1.1"}>, @original_params={}, @template_cache=#<Tilt::Cache:0xb6ee4fb0 @cache={}>, @env={"HTTP_HOST"=>"127.0.0.1:9393", "HTTP_ACCEPT"=>"*/*", "SERVER_NAME"=>"127.0.0.1", "REQUEST_PATH"=>"/user/add.json", "rack.url_scheme"=>"http", "HTTP_USER_AGENT"=>"Ruby", "REMOTE_HOST"=>"localhost", "CONTENT_LENGTH"=>"50", "rack.errors"=>#<Rack::Lint::ErrorWrapper:0xb6ee5294 @error=#<IO:0xb77e955c>>, "SERVER_PROTOCOL"=>"HTTP/1.1", "CONTENT_TYPE"=>"application/json", "rack.version"=>[1, 1], "rack.run_once"=>false, "SERVER_SOFTWARE"=>"WEBrick/1.3.1 (Ruby/1.8.7/2011-02-18)", "REMOTE_ADDR"=>"127.0.0.1", "PATH_INFO"=>"/user/add.json", "SCRIPT_NAME"=>"", "HTTP_VERSION"=>"HTTP/1.1", "rack.multithread"=>true, "rack.multiprocess"=>false, "REQUEST_URI"=>"http://127.0.0.1:9393/user/add.json", "rack.request.query_hash"=>{}, "SERVER_PORT"=>"9393", "REQUEST_METHOD"=>"POST", "rack.request.query_string"=>"", "rack.input"=>#<Rack::Lint::InputWrapper:0xb6ee52d0 @input=#<StringIO:0xb76fbeb0>>, "HTTP_CONNECTION"=>"close", "QUERY_STRING"=>"", "GATEWAY_INTERFACE"=>"CGI/1.1"}, @app=nil, @observer_peers=[#<HookMongo:0xb6d714f8 @extra=nil, @app=#<Api:0xb6ee4e70 ...>>], @response=#<Sinatra::Response:0xb6edb94c @writer=#<Proc:0xb77cd4b0@/home/scott/.rvm/gems/ruby-1.8.7-p334@api/gems/rack-1.3.0/lib/rack/response.rb:28>, @block=nil, @chunked=false, @length=0, @header={"Content-Type"=>nil}, @body=[], @status=200>>
Net::HTTP.post_form(URI.parse('http://127.0.0.1:9393/user/add.json'),{'first_name' => 'Smith', 'last_name' => 'Bill'})
#<Api:0xb6ee4fec @block_params=[], @result={"status"=>200, "error"=>nil}, @params={"last_name"=>"Bill", "first_name"=>"Smith"}, @observer_state=true, @request=#<Sinatra::Request:0xb6ee4f88 @params={"last_name"=>"Bill", "first_name"=>"Smith"}, @route="/user/add.json", @env={"HTTP_HOST"=>"127.0.0.1:9393", "HTTP_ACCEPT"=>"*/*", "SERVER_NAME"=>"127.0.0.1", "REQUEST_PATH"=>"/user/add.json", "rack.url_scheme"=>"http", "HTTP_USER_AGENT"=>"Ruby", "REMOTE_HOST"=>"localhost", "CONTENT_LENGTH"=>"31", "rack.errors"=>#<Rack::Lint::ErrorWrapper:0xb6ee5410 @error=#<IO:0xb77e955c>>, "SERVER_PROTOCOL"=>"HTTP/1.1", "CONTENT_TYPE"=>"application/x-www-form-urlencoded", "rack.version"=>[1, 1], "rack.run_once"=>false, "SERVER_SOFTWARE"=>"WEBrick/1.3.1 (Ruby/1.8.7/2011-02-18)", "REMOTE_ADDR"=>"127.0.0.1", "PATH_INFO"=>"/user/add.json", "SCRIPT_NAME"=>"", "HTTP_VERSION"=>"HTTP/1.1", "rack.multithread"=>true, "rack.request.form_vars"=>"first_name=Smith&last_name=Bill", "rack.multiprocess"=>false, "REQUEST_URI"=>"http://127.0.0.1:9393/user/add.json", "rack.request.form_input"=>#<Rack::Lint::InputWrapper:0xb6ee544c @input=#<StringIO:0xb76d72a4>>, "rack.request.query_hash"=>{}, "SERVER_PORT"=>"9393", "REQUEST_METHOD"=>"POST", "rack.request.form_hash"=>{"last_name"=>"Bill", "first_name"=>"Smith"}, "rack.request.query_string"=>"", "rack.input"=>#<Rack::Lint::InputWrapper:0xb6ee544c @input=#<StringIO:0xb76d72a4>>, "QUERY_STRING"=>"", "GATEWAY_INTERFACE"=>"CGI/1.1"}>, @original_params={"last_name"=>"Bill", "first_name"=>"Smith"}, @template_cache=#<Tilt::Cache:0xb6ee512c @cache={}>, @env={"HTTP_HOST"=>"127.0.0.1:9393", "HTTP_ACCEPT"=>"*/*", "SERVER_NAME"=>"127.0.0.1", "REQUEST_PATH"=>"/user/add.json", "rack.url_scheme"=>"http", "HTTP_USER_AGENT"=>"Ruby", "REMOTE_HOST"=>"localhost", "CONTENT_LENGTH"=>"31", "rack.errors"=>#<Rack::Lint::ErrorWrapper:0xb6ee5410 @error=#<IO:0xb77e955c>>, "SERVER_PROTOCOL"=>"HTTP/1.1", "CONTENT_TYPE"=>"application/x-www-form-urlencoded", "rack.version"=>[1, 1], "rack.run_once"=>false, "SERVER_SOFTWARE"=>"WEBrick/1.3.1 (Ruby/1.8.7/2011-02-18)", "REMOTE_ADDR"=>"127.0.0.1", "PATH_INFO"=>"/user/add.json", "SCRIPT_NAME"=>"", "HTTP_VERSION"=>"HTTP/1.1", "rack.multithread"=>true, "rack.request.form_vars"=>"first_name=Smith&last_name=Bill", "rack.multiprocess"=>false, "REQUEST_URI"=>"http://127.0.0.1:9393/user/add.json", "rack.request.form_input"=>#<Rack::Lint::InputWrapper:0xb6ee544c @input=#<StringIO:0xb76d72a4>>, "rack.request.query_hash"=>{}, "SERVER_PORT"=>"9393", "REQUEST_METHOD"=>"POST", "rack.request.form_hash"=>{"last_name"=>"Bill", "first_name"=>"Smith"}, "rack.request.query_string"=>"", "rack.input"=>#<Rack::Lint::InputWrapper:0xb6ee544c @input=#<StringIO:0xb76d72a4>>, "QUERY_STRING"=>"", "GATEWAY_INTERFACE"=>"CGI/1.1"}, @app=nil, @observer_peers=[#<HookMongo:0xb6d68c18 @extra=nil, @app=#<Api:0xb6ee4fec ...>>], @response=#<Sinatra::Response:0xb6edbac8 @writer=#<Proc:0xb77cd4b0@/home/scott/.rvm/gems/ruby-1.8.7-p334@api/gems/rack-1.3.0/lib/rack/response.rb:28>, @block=nil, @chunked=false, @length=0, @header={"Content-Type"=>nil}, @body=[], @status=200>>
# Executes a POST request.
# Used to create new resources.
def post(path, body = '', headers = {})
with_auth { request(:post, path, body.to_s, build_request_headers(headers, :post, self.site.merge(path))) }
end
最佳答案
Sinatra 默认不解析正文。如果有表单编码头,Rack 会解析表单编码体并将其放入 params 这就是为什么使用 post_form
作品。您需要将请求正文拉出并自己解析。例如
post '/add' do
user_hash = JSON.parse request.body
User.create! user_hash
end
关于ruby-on-rails - 为什么 ActiveResource Post 不发送任何参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6539079/
是否有人对将 CarrierWave 与 ActiveResource 模型(在 Rails 3 中)一起使用有任何见解?我有一个带有文件名字段的 ActiveResource 模型,我想将文件保存到
我有一个 Rails 应用程序,它有一个带有 nested resource 的公司资源。员工。我使用的是浅层路由,所以为了运算符(operator)工,我的路由是: GET /employe
我有一个 Java 支持的 Web 服务,我想用 ActiveResource 来测试它。 假定的基本 url 端点是什么,假设我有一个用户资源。 目前我的网址是: localhost:8080/ap
我尝试调用 API。我只想使用事件资源,所以我将这段代码放在一个简单的文件 .rb 中: class Order ': uninitialized constant ActiveRessource (
我正在考虑使用 ActiveResource,但现在面临一个我无法弄清楚的问题(现在已经在网上搜索了几天的解决方案)。 所以我有一个身份验证应用程序位于 http://localhost:80和端口上
我想通过 activeresource 创建一个新客户。没有authentication_key,这没什么大不了的。我正在使用 devise 身份验证和 cancan。 customer = Cust
我将 ActiveResource 用于长时间运行的导入和同步作业。有没有办法为失败的请求指定重试?我想避免围绕每个 ActiveResource 请求使用丑陋的开始/救援/重试结构。 最佳答案 这取
我想在 Rails 中测试我的 RESTful 资源: require 'rubygems' require 'activeresource' class Event :29:in `require'
我一直在寻找一段时间,但我还没有找到满意的答案。我有两个应用程序。 FrontApp 和 BackApp。 FrontApp 有一个事件资源,它模仿 BackApp 中的模型。所有模型级别的验证都在
我一直在使用ActiveResource在我的 Ruby on Rails 应用程序中使用了一段时间,我开始真的觉得它需要最后的润色才能使它从“非常好”变成“漂亮”。 我希望能够像使用 ActiveR
在 REST API 中实现分页以便 ActiveResource 客户端可以轻松导航分页结果的最佳方法是什么?已经有一些提案,例如here和 here ,但作为 ActiveResource 的新手
我的 Rails 3.1 应用程序使用了一个引擎,我想知道对该引擎的访问是否是线程安全的。 我在引擎中有/lib/mymodule.rb,它看起来像这样: module MyModule def
我刚刚开始构建一个 api 和使用 ActiveResource 从 api 消费的应用程序。我将通过编辑详细说明,但我最初的问题是: 我有一个执行 Resource.find(resource.id
我正在使用名为“设置”的 ActiveResource 模型连接到外部 Web 服务,该服务提供一些响应,如下例所示: {"setting" => {"id" => 10, :details => {
我正在尝试编写一个 ActiveResources 模型来与 Google Places API 交互 - https://developers.google.com/places/web-servi
我正在构建一个将使用 Highrise CRM gem 访问 Highrise 数据的 sinatra 应用程序。这个 gem 基于 ActiveResource 类。我想为每个请求设置站点、用户字段
我正在将我们的主要数据存储从 ActiveRecord 移开,取而代之的是,数据将可以通过 REST API 作为 JSON 访问。我应该使用 ActiveResource 还是 HTTParty 来
为所有 ActiveResource in rails 添加记录器的最佳方法是什么? 在我的应用程序中,我有一些方法通过 ActiveResource 调用 API,有时会出现超时错误。 所以,我只想
在我的应用程序中,我使用 ActiveResource 来管理从远程 API 接收的数据。比如,我的一个模型名为 Account,它有一个名为 settings 的字段,它在 API 中记录为“自由格
我正在开发一个 Rails 应用程序,它将通过 Rails 的 ActiveResource 功能作为其他 Rails 应用程序的身份验证系统。 身份验证应用程序有一个名为 User 的 Active
我是一名优秀的程序员,十分优秀!