0

私のRailsアプリケーションには、@departmentsと@registerの2つのインスタンス変数があります

@部門 =

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

@登録=

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

@register には array が含まれています。

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

各部門とそれに対応する出席を配列に追加して、期待される形式で表示できるようにすることはできますか。

4

2 に答える 2

0

このようなものを使用してコントローラーでオブジェクトを作成するのが最も簡単かもしれませんが、 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
于 2013-01-04T05:40:43.403 に答える
0

おそらく、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_manyUsersDepartment

于 2013-01-04T05:28:17.203 に答える