Ruby on rails 将Rails应用程序包装为API,访问不起作用的参数
我正在将Rails应用程序包装到api中,这是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
# 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?