Ruby 通过Sinatra获得续集关联
我试图从我的Sinatra REST API返回json格式的数据。我目前已经建立了很多关联,但是我很难从我的API中获得我想要的视图,尽管在Ruby中很容易获得它们 例如,从我的表格:Ruby 通过Sinatra获得续集关联,ruby,sinatra,sequel,Ruby,Sinatra,Sequel,我试图从我的Sinatra REST API返回json格式的数据。我目前已经建立了很多关联,但是我很难从我的API中获得我想要的视图,尽管在Ruby中很容易获得它们 例如,从我的表格: DB.create_table?(:calendars) do primary_key :id end DB.create_table?(:schedules) do primary_key :id foreign_key :resource_id, :resources foreign
DB.create_table?(:calendars) do
primary_key :id
end
DB.create_table?(:schedules) do
primary_key :id
foreign_key :resource_id, :resources
foreign_key :task_id, :tasks
foreign_key :calendar_id, :calendars
end
在Ruby中,我可以运行这样的块,并通过我的关联显示我需要的所有信息:
Calendar.each do |c|
c.schedules.each do |s|
puts "RESOURCE ##{s.resource_id}"
s.tasks.each do |t|
p t
end
puts
end
end
c.schedules
调用之所以有效,是因为我的calendar
模型包含一对多:schedules关联
现在,我想知道这是如何转化为我的Sinatra API的。在我的简单的GET
route中,我尝试了许多变体,试图获取与日历关联的日程表,并将其转换为JSON:
get '/calendars' do
c = DB[:calendar].first
c.schedules.to_json
content_type :json
end
。。。但是我最终会遇到一个错误,比如{:id=>1}:Hash的undefined方法'schedules'
所以看起来它在这里返回了一个散列,但我已经尝试了很多东西,还没有弄清楚我应该如何与我在西纳特拉的协会合作。我该怎么做
谢谢 第一个块有效而第二个块无效的原因是,在第一种情况下,您使用的是类日历的Sequel模型实例,而在第二种情况下,您使用的是Sequel数据集
迭代Calendar.each do | c |
时,c
变量将填充Calendar
类Sequel模型对象的实例。此对象定义了关系方法(一对多
),您可以查询计划
,并在其上运行其他模型方法
但是,c=DB[:calendar]。首先,
为您获取一个日历。此对象与模型实例不同,它返回一个标准Ruby哈希(或哈希数组)
您可以将第二个块更改为使用模型,它将得到您想要的结果:
get '/calendars' do
c = Calendar.first # <=== CHANGE FROM DATASET TO MODEL
c.schedules.to_json
content_type :json
end
get'/calendars'do
c=日历。首先#