2014-01-14 5 views
0

Я пытаюсь сделать JSON, который выглядит примерно так:Предотвращение RABL (с Rails) авто-singularizing псевдонимами

elements: { 
    nodes: [ 
     { data: { id: 'j', title: 'Jerry' } }, 
     { data: { id: 'e', title: 'Elaine' } }, 
     { data: { id: 'k', title: 'Kramer' } }, 
     { data: { id: 'g', title: 'George' } } 
    ], 
    edges: [ 
     { data: { source: 'j', target: 'e' } }, 
     { data: { source: 'j', target: 'k' } }, 
     { data: { source: 'k', target: 'j' } }, 
    ] 
} 

С RABL. Мой код выглядит следующим образом:

object @work => :elements 

child :nodes, :root => :nodes, :object_root => "data".pluralize do 
    attributes :id, :title 
end 

child :links, :root => :edges, :object_root => :data do 
    attribute :parent_id => :source 
    attribute :child_id => :target 
end 

Но мой JSON еще читает

{"elements": 
    {"nodes":[ 
     {"datum":{"id":j,"title":"Jerry"}}, 
     {"datum":{"id":k,"title":"Kramer"}}, 

и т.д ...

Как вы можете видеть, я пробовал функцию .pluralize, даже .pluralize(2) попробовать чтобы заставить его признать его множественным, но безрезультатно. Кажется, что RABL, вероятно, звонит .singularize где-то по линии, но я не уверен, как обойти его.

Мне нужно, чтобы он читал «данные» вместо «datum» из-за библиотеки, которую я использую (cytoscape.js), что требует форматирования JSON определенным образом. Спасибо за любую помощь!

ответ

0

Я нашел решение. В принципе, добавление s во множественную версию слова будет развить его в обратную сторону во множественном варианте, а не в единственном варианте.

Это немного дрянной, но этот код в show.json.rabl:

object @work => :elements 

child :nodes, :root => :nodes, :object_root => :datas do 
    attributes :id, :title 
end 

child :links, :root => :edges, :object_root => :datas do 
    attribute :parent_id => :source 
    attribute :child_id => :target 
end 

дает

"elements":{ 
    "nodes":[ 
     {"data":{"id":820,"title":"Jerry"}}, 
     {"data":{"id":821,"title":"Elaine"}} 

т.д.

Я считаю, что это потому, что функция образовывать форму единственного числа не признает "ДАННЫЕ" так как это не слово, поэтому он по умолчанию отключает s. Тот, кто знает рубин немного лучше, чем я мог бы подтвердить/снять это.

Это, вероятно, довольно очевидно для людей, но, возможно, это поможет кому-то вроде меня, который не думал об этом.

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