【问题标题】:Rails 3 : Generate view using rablRails 3:使用 rabl 生成视图
【发布时间】:2013-01-04 05:22:24
【问题描述】:

在我的 Rails 应用程序中,我有两个实例变量 @departments 和 @register

@部门 =

{
    "users": [
        {
            "departmentid": "DP11"
        },
        {
            "departmentid": "DP12"
        },
        {
            "departmentid": "DP13"
        },
        {
            "departmentid": "DP10"
        }
    ]
}

@注册 =

{
    "attendance": [
        0,
        0,
        2,
        1
    ]
}

@register 包含一个数组。

是否可以使用 rabl (attendancebydepartment.json.rabl) 视图显示如下格式

{
        "users": [
            {
                "departmentid": "DP11",
                "attendance"=0
            },
            {
                "departmentid": "DP12",
                "attendance"=0
            },
            {
                "departmentid": "DP13",
                "attendance"=2
            },
            {
                "departmentid": "DP10",
                "attendance"=1
            }
        ]
    }

我的控制器看起来像

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

是否可以将每个部门及其对应的考勤添加到数组中,以便我可以按预期的格式显示。

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 json rabl


    【解决方案1】:

    也许使用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]]
    

    另一方面,看起来更简单的设计是让Department 模型与has_many 关联Users。然后您可以直接从Department 的实例中引用用户数。

    【讨论】:

    • 部门不是模型,它是用户表中的一个字段。用户和注册之间没有关系......。
    【解决方案2】:

    使用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
    

    在视图中:

    collection @users => :users
    attribute :departmentid, :attendence
    

    【讨论】:

    • 我收到错误“MultiJson::DecodeError - invalid format, expected, or } while in an object at line 3, column 2”......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-25
    • 2011-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-17
    相关资源
    最近更新 更多