2013-05-15 3 views
1

Итак, я использую TimelineJS (http://timeline.verite.co/), и я вхожу в приложение Rails.Как создать строку JSON в приложении rails

И мне нужно выяснить, как создать подходящую строку JSON для использования с TimelineJS.

Итак, для демонстрации строки JSON ниже ..... что мне нужно сделать для моего приложения, чтобы воссоздать эту строку JSON?

(https://github.com/VeriteCo/TimelineJS#json) Пример JSON разработчики TimelineJS демонстрируют как выглядит так ...

var dataObject = { 
"timeline": 
{ 
    "headline":"The Main Timeline Headline Goes here", 
    "type":"default", 
    "text":"<p>Intro body text goes here, some HTML is ok</p>", 
    "asset": { 
     "media":"http://yourdomain_or_socialmedialink_goes_here.jpg", 
     "credit":"Credit Name Goes Here", 
     "caption":"Caption text goes here" 
    }, 
    "date": [ 
     { 
      "startDate":"2011,12,10", 
      "endDate":"2011,12,11", 
      "headline":"Headline Goes Here", 
      "text":"<p>Body text goes here, some HTML is OK</p>", 
      "tag":"This is Optional", 
      "classname":"optionaluniqueclassnamecanbeaddedhere", 
      "asset": { 
       "media":"http://twitter.com/ArjunaSoriano/status/164181156147900416", 
       "thumbnail":"optional-32x32px.jpg", 
       "credit":"Credit Name Goes Here", 
       "caption":"Caption text goes here" 
      } 
     } 
    ], 
    "era": [ 
     { 
      "startDate":"2011,12,10", 
      "endDate":"2011,12,11", 
      "headline":"Headline Goes Here", 
      "text":"<p>Body text goes here, some HTML is OK</p>", 
      "tag":"This is Optional" 
     } 

    ] 
} 

}

Не уверен, если это поможет, но, схема для моего приложения выглядит так ... .

ActiveRecord::Schema.define(:version => 20130507031759) do 

    create_table "ckeditor_assets", :force => true do |t| 
    t.string "data_file_name",     :null => false 
    t.string "data_content_type" 
    t.integer "data_file_size" 
    t.integer "assetable_id" 
    t.string "assetable_type", :limit => 30 
    t.string "type",    :limit => 30 
    t.integer "width" 
    t.integer "height" 
    t.datetime "created_at",      :null => false 
    t.datetime "updated_at",      :null => false 
    end 

    add_index "ckeditor_assets", ["assetable_type", "assetable_id"], :name => "idx_ckeditor_assetable" 
    add_index "ckeditor_assets", ["assetable_type", "type", "assetable_id"], :name => "idx_ckeditor_assetable_type" 

    create_table "coins", :force => true do |t| 
    t.datetime "created_at", :null => false 
    t.datetime "updated_at", :null => false 
    t.integer "coin_id" 
    end 

    create_table "events", :force => true do |t| 
    t.datetime "created_at", :null => false 
    t.datetime "updated_at", :null => false 
    end 

    create_table "moderations", :force => true do |t| 
    t.integer "moderatable_id" 
    t.string "moderatable_type" 
    t.text  "data",    :null => false 
    t.datetime "created_at",  :null => false 
    t.datetime "updated_at",  :null => false 
    end 

    create_table "mods", :force => true do |t| 
    t.datetime "created_at", :null => false 
    t.datetime "updated_at", :null => false 
    end 

    create_table "pages", :force => true do |t| 
    t.text  "content" 
    t.string "name" 
    t.string "permalink" 
    t.string "image_url" 
    t.datetime "created_at", :null => false 
    t.datetime "updated_at", :null => false 
    end 

    create_table "posts", :force => true do |t| 
    t.string "coin_id" 
    t.text  "content" 
    t.integer "user_id" 
    t.datetime "created_at",   :null => false 
    t.datetime "updated_at",   :null => false 
    t.string "title" 
    t.boolean "approved" 
    t.string "photo_file_name" 
    t.string "photo_content_type" 
    t.integer "photo_file_size" 
    t.datetime "photo_updated_at" 
    t.integer "event_id" 
    end 

    create_table "users", :force => true do |t| 
    t.string "email" 
    t.string "password_digest" 
    t.boolean "admin" 
    t.datetime "created_at",       :null => false 
    t.datetime "updated_at",       :null => false 
    t.string "spree_api_key",   :limit => 48 
    t.integer "ship_address_id" 
    t.integer "bill_address_id" 
    t.string "auth_token" 
    t.string "password_reset_token" 
    t.datetime "password_reset_sent_at" 
    t.string "username" 
    t.boolean "avatar" 
    end 

end 

Так как же я могу создать цепочку JSON TimelineJs? Есть идеи?

UPDATE: используя совет по первому ответу, представленный ниже ... У меня есть это в моей модели и файлах контроллера соответственно ... но это не работает ... Я получаю ошибку «неопределенный метод - временная шкала». .. что я делаю неправильно?

coin.rb (модель)

class Coin < ActiveRecord::Base 
attr_accessible :coin_id 

has_many :events 
has_many :users, :through => :events 

def timeline  
    t = {} 
    t['timeline'] = {} 
    t['timeline']['headline'] = "Lorem" 
    t['timeline']['text'] = "default" 
    t['timeline']['asset'] = "" 
    t['timeline']['asset']['media'] = "" 
    t['timeline']['asset']['credit'] = "" 
    t['timeline']['asset']['caption'] = "" 

    t['timeline']['date'] = {} 
    t['timeline']['date']['startDate'] = "" 
    t['timeline']['date']['endDate'] = "" 
    t['timeline']['date']['headline'] = "" 
    t['timeline']['date']['text'] = "" 
    t['timeline']['date']['tag'] = "" 
    t['timeline']['date']['classname'] = "" 
    t['timeline']['date']['asset'] = "" 


    t['timeline']['era'] = {} 
    t['timeline']['era']['startDate'] = "" 
    t['timeline']['era']['endDate'] = "" 
    t['timeline']['era']['headline'] = "" 
    t['timeline']['era']['text'] = "" 
    t['timeline']['era']['tag'] = "" 
    return t 
end 

end 

А внутри coin_controller.rb

класс CoinsController < ApplicationController

# GET /coins/1 
# GET /coins/1.json 
def show 
    @coin = Coin.find(params[:id]) 
    @timeline = Coin.timeline.to_json 

    respond_to do |format| 
    format.html # show.html.erb 
    format.json { render json: @timeline } 
    end 
end 

конец

ответ

5

Rails имеет встроенный to_json м енит. Вам нужно будет использовать метод в вашей модели, который создает хэш с этой структурой, и вы можете отправить его на передний план как json. Например:

class YourModel 
    def timeline 
     t = {} 
     t['timeline'] = {} 
     t['timeline']['headline'] = "Lorem ipsum" 
     ... 
     ... 

     return t 
    end 
end 

В вашем действии контроллера:

@timeline = model.timeline.to_json 

Оттуда вам нужно позвонить JSON.parse(), чтобы потреблять данные на переднем конце.

+0

загляните в мое обновление до исходного вопроса ... Я получаю неопределенную ошибку метода, и я не уверен, как решить ... спасибо за вашу помощь. – thefonso

+0

@ coin.timeline.to_json – ryan508

+0

@thefonse, мне просто интересно, решили ли вы решить свою проблему? У меня точно такая же проблема. Если вы можете поделиться своим решением, чтобы решить проблему, это было бы здорово. Большое спасибо! – AgainstPIT

0

Вы можете использовать jbuilder для создания комплекса JSON. Он работает как обычный вид. Просто создайте шаблон index/show.json.jbuilder внутри папок видов. Тогда вам не нужно звонить render json: @timeline.

 Смежные вопросы

  • Нет связанных вопросов^_^