Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 将Rails应用程序包装为API,访问不起作用的参数_Ruby On Rails_Ruby_Ajax_Api_Net Http - Fatal编程技术网

Ruby on rails 将Rails应用程序包装为API,访问不起作用的参数

Ruby on rails 将Rails应用程序包装为API,访问不起作用的参数,ruby-on-rails,ruby,ajax,api,net-http,Ruby On Rails,Ruby,Ajax,Api,Net Http,我正在将Rails应用程序包装到api中,这是api应用程序的一部分: # Merge existing yaml with post params def merge_config(yaml, params) if params['post'].has_key? 'yaml' params['post']['yaml'].each do |key, value| if value == 'true' yaml[key] = true e

我正在将Rails应用程序包装到api中,这是api应用程序的一部分:

   # Merge existing yaml with post params
def merge_config(yaml, params)
  if params['post'].has_key? 'yaml'
    params['post']['yaml'].each do |key, value|
      if value == 'true'
        yaml[key] = true
      elsif value == 'false'
        yaml[key] = false
      else
        yaml[key] = value
      end
    end
  end

  yaml
end

# Update exiting post.
def update_post(params)
  post_file   = params[:post][:name]
  post        = jekyll_post(post_file)
  yaml_config = merge_config(post.data, params)
  write_post_contents(params[:post][:content], yaml_config, post_file)

  post_file
end


post '/save-post' do

  if params[:method] == 'put'
    filename = create_new_post(params)        
    log_message = "Created #{filename}"
  else
    filename = update_post(params)
    log_message = "Changed #{filename}"
  end

  # Stage the file for commit
  repo.add File.join(jekyll_site.source, *%w[_posts], filename)

  data = repo.commit_index log_message
  push_to_origin(repo)

  if params[:ajax]
    {:status => 'OK'}.to_json
  else
    redirect @base_url + '/edit/' + filename
  end
end
这是我在另一个应用程序中访问savepost方法的Rails代码。我正在向其发布一份表格:

 def sendPostData
    uri = URI('http://immense-escarpment-7957.herokuapp.com/admin/save-post')

    req = Net::HTTP::Post.new(uri.path)
    req.basic_auth username, password
    req.body = params


    res = Net::HTTP.new(uri.host, uri.port)
    res.start {|http|
       http.request(req)
    }
    @textToShow = res
end
内部表单post得到了200,下面是进入sendPostData方法的表单数据(通过Chrome开发工具访问):

附加到API应用程序的视图具有类似的表单数据,并且正在工作:

post[title]:jkhjklhk
post[content]:
post[name]:2014-05-22-jkhjklhk.md
post[yaml][title]:jkhjklhk
post[yaml][layout]:post
post[yaml][published]:true
post[yaml][hi]:hmmmmmmm
ajax:true
但是,save post方法返回的是500,我在日志中发现了以下错误:

2014-05-25T23:21:06.827121+00:00 app[web.1]: NoMethodError - undefined method `[]' for nil:NilClass:
2014-05-25T23:21:06.827129+00:00 app[web.1]:    /app/lib/pagoda/app.rb:83:in      `update_post'
第83行是这一行:

post_file = params[:post][:name]

如果它认为这是零,我是否没有正确地传递参数?

它告诉您您的
参数[:post]
是零

只需按照此提示查找
params[:post]
为零的原因

或者你可以保护它:

post_file = params[:post][:name] if params[:post].present?
post_file = params[:post][:name] if params[:post].present?