Ruby on rails Rails 3:使用rabl生成视图
在我的Rails应用程序中,我有两个实例变量@departments和@register @部门=Ruby on rails Rails 3:使用rabl生成视图,ruby-on-rails,ruby,ruby-on-rails-3,json,rabl,Ruby On Rails,Ruby,Ruby On Rails 3,Json,Rabl,在我的Rails应用程序中,我有两个实例变量@departments和@register @部门= { "users": [ { "departmentid": "DP11" }, { "departmentid": "DP12" }, { "departmentid": "DP13" }, {
{
"users": [
{
"departmentid": "DP11"
},
{
"departmentid": "DP12"
},
{
"departmentid": "DP13"
},
{
"departmentid": "DP10"
}
]
}
@寄存器=
{
"attendance": [
0,
0,
2,
1
]
}
@寄存器包含一个数组
是否可以使用rabl(attendancebydepartment.json.rabl)视图显示如下格式
我的控制器看起来像
def attendancebydepartment
@register = Array.new
@departments = User.select('departmentid').uniq
startdate = params[:startdate]
enddate = params[:enddate]
@count = @departments.count
@departments.each do |d|
@register << (Register.where(:date => startdate..enddate , :departmentid => d.departmentid).sum(:one))+(Register.where(:date => startdate..enddate , :departmentid => d.departmentid).sum(:two))
end
end
def attendancebydepartment
@register=Array.new
@departments=User.select('departmentid').uniq
startdate=参数[:startdate]
enddate=参数[:enddate]
@count=@departments.count
@每个部门都有|
@register startdate..enddate,:departmentid=>d.departmentid).sum(:one))+(register.where(:date=>startdate..enddate,:departmentid=>d.departmentid).sum(:two))
结束
结束
是否可以将每个部门及其对应的考勤添加到数组中,以便我可以按预期格式显示。也许可以使用
zip
方法创建一个新变量,然后显示该变量
irb(main):001:0> departments = {'users' => [{'id' => 1}, {'id' => 2}]}
=> {"users"=>[{"id"=>1}, {"id"=>2}]}
irb(main):002:0> register = {'attendance' => [0,1]}
=> {"attendance"=>[0, 1]}
irb(main):004:0> departments['users'].zip(register['attendance'])
=> [[{"id"=>1}, 0], [{"id"=>2}, 1]]
另一方面,看起来更简单的设计应该是有一个
部门
模型,它有一个与用户
有许多关联。然后,您可以直接从部门
的实例中引用用户数。使用OpenStruct
在控制器中创建对象可能是最简单的,类似这样的,但我建议重新编写attendancebydepartment
以避免循环两次
@users = []
@departments.each_with_index do |dep, index|
user = OpenStruct.new
user.departmentid = dep.departmentid
user.attendence = @register[index].attendence
@users << user
end
我在第3行第2列的对象中收到错误“MultiJson::DecodeError-无效格式,应为,或}”……部门不是模型,而是用户表中的字段。用户和寄存器之间没有关系。。。。。。。
@users = []
@departments.each_with_index do |dep, index|
user = OpenStruct.new
user.departmentid = dep.departmentid
user.attendence = @register[index].attendence
@users << user
end
collection @users => :users
attribute :departmentid, :attendence