使用来自 API 的数据在 Sinatra 中设置后置参数



我想要一个GET路由,它将查询API来收集数据,然后重定向到带有该数据的POST以保存到数据库。例如:

get '/query/twitter/company/:name' do
    get_number_of_tweets_for_day( params[:name] )
end
POST '/company/tweets/' do
    company.tweets.create(:date => time_now, :count => num_tweets)
end

如何从 GET 路由中的函数返回的数据中设置参数,并将它们传递给 POST 路由以便保存到数据库?

您的代码有两个完全独立的终结点,它们在单独的 API 请求中调用。您可以将其设置为单个 POST 请求,即:

post '/company/:name/tweets/' do
  num_tweets = get_number_of_tweets_for_day( params[:name] )
  company.tweets.create(:date => time_now, :count => num_tweets)
end

作为替代方法,为了在后续请求之间持久保存数据,通常使用会话:

enable :sessions
get '/query/twitter/company/:name' do
  session['num_tweets'] = get_number_of_tweets_for_day( params[:name] )
end
post '/company/tweets/' do
  company.tweets.create(:date => time_now, :count => session['num_tweets'])
end

从 GET 到 POST 的重定向是不可能的,因为浏览器在重定向后会保持请求方法不变。您还必须将第一条路由设为 POST。

最新更新