2015-08-04 3 views
2

Это JSON я хочу построить из RABL жемчужинуКак я могу генерировать json-ответ от драгоценного камня rabl и драгоценного камня с таблицей базы данных, которую у меня есть?

[ 
"M-0": {"revenue":"value", "fee":"value", "created":"count", "paid":"count", "partially_paid":"count"}, 
"M-1": {"revenue":"value", "fee":"value", "created":"count", "paid":"count", "partially_paid":"count"}, 
"M-2": {"revenue":"value", "fee":"value", "created":"count", "paid":"count", "partially_paid":"count"}, 
"M-3": ["revenue":"value", "fee":"value", "created":"count", "paid":"count", "partially_paid":"count"], 
"M-4": {"revenue":"value", "fee":"value", "created":"count", "paid":"count", "partially_paid":"count"}, 
"M-5": {"revenue":"value", "fee":"value", "created":"count", "paid":"count", "partially_paid":"count"} 
] 

Это моя таблица базы данных

create_table "merchant_monthly_stats", force: true do |t| 
    t.integer "created_count",  default: 0 
    t.integer "ready_count",   default: 0 
    t.integer "paid_count",   default: 0 
    t.integer "partially_paid_count", default: 0 
    t.integer "cancelled_count",  default: 0 
    t.integer "failed_count",   default: 0 
    t.integer "processed_count",  default: 0 
    t.integer "expired_count",  default: 0 
    t.integer "merchant_id",       null: false 
    t.integer "year",         null: false 
    t.integer "month",        null: false 
    t.datetime "created_at" 
    t.datetime "updated_at" 
    t.integer "overdue_count",  default: 0 
    t.integer "fee_centimes",   default: 0,  null: false 
    t.string "fee_currency",   default: "XAF", null: false 
    t.integer "revenue_centimes",  default: 0,  null: false 
    t.string "revenue_currency",  default: "XAF", null: false 
    end 

Это мой метод контроллера

def history 
    current_month = Time.now.month 
    current_year = Time.now.year 
    list_of_last_six_months = [current_month] 
    5.times do |i| 
     list_of_last_six_months << (current_month - i) 
    end 

    month_array =[] 
    list_of_last_six_months.each { |month| 
     record = MerchantMonthlyStat.find_by merchant_id: current_api_user.id, year: current_year, month: month 
     m = { 
     :revenue => Money.new(record.revenue_centimes , record.revenue_currency).format, 
     :fees => Money.new(record.fee_centimes,record.fee_currency).format, 
     :created => record.created_count , 
     :paid => record.paid_count , 
     :partially_paid => record.partially_paid_count } 
     month_array.push(m) 
    } 
    respond_with(month_array, status: :ok, template: 'api/merchant/mobiles/history') 
    end 

Мой вопрос заключается в том, как сделать Я пишу шаблон rabl «api/merchant/mobiles/history», чтобы получить вышеупомянутый ответ json?

Примечание: Я использую драгоценный камень с рельсами. Вот почему есть Money.new и т.д.

Update:

Если я следующее:

# app/app.rb 
get "/posts", :provides => [:json, :xml] do 
    @user = current_user 
    @posts = Post.order("id DESC") 
    render "posts/index" 
end 

RABL документы написали следующие RABL для него (что не имеет смысла для меня):

# app/views/posts/index.rabl 
collection @posts 
attributes :id, :title, :subject 
child(:user) { attributes :full_name } 
node(:read) { |post| post.read_by?(@user) } 

Но я не знаю, как применить это, чтобы получить мой month_array в Rabl и в формате я хочу? Кто-нибудь хочет это решить? Я застрял.

+1

Но то, что вы предоставили, не похоже на JSON. Что это за метки «M-0», «M-1» и т. Д.? – EugZol

+1

Я не вижу никаких усилий. Ваш вопрос: _write code for me_. –

+0

Итак, как вы думаете, кто написал остальную часть вещей выше? Это не усилия? Я просто не знаю много в рельсах. Я учусь с недели, и это прогресс, который я мог сделать. Это все. – samo

ответ

1

Просто используйте render :json

render json: month_array 

Нет необходимости возиться с шаблонами, вы уже построили свой массив в контроллере.

Обновление от комментариев: Сделать экземпляр month_array vairable - изменить my_array на @my_array. А затем в вашем шаблоне rabl просто напишите коллекцию @my_array, object_root: false

+0

На самом деле я предложил это моему старшему уже с тех пор, как я легко могу это сделать. Но он сказал, что мы используем rabl, и мне нужно его изучить. В противном случае я бы отметил вас как ответ. :( – samo

+1

Ну, вы можете сделать экземпляр month_array vairable - измените 'my_array' на' @ my_array'. И тогда в вашем шаблоне rabl просто напишите 'collection @my_array, object_root: false' – EugZol

+0

Получил, спасибо EugZol – samo