2015-03-30 8 views
1

У меня есть этот код:Rails настраиваемое поле в to_json

@locations = @list.all.to_json(:root => false, 
       :only => [:author,:lat,:long,:text]) 

Он прекрасно работает и это именно то, что я хочу. Но теперь я хочу добавить к полям URL-адрес страницы показа каждой записи.

Так было бы, как:

[{ 
    "author:"blabla", 
    "lat":blabla, 
    "long":blabla, 
    "text":"blabla", 
    "url":"url for show page" 
}] 

Я пробовал вариант слияния, но это ничего не добавляет или выбросить какие-либо ошибки.

Как я могу это достичь?

+0

Пожалуйста, отметьте ответ как принятый, если он помог решить вашу проблему. – phts

ответ

1

Благодаря phts Мне удалось получить решение:

Я определяю d метод в модели

def url 
    "/url/to/page/#{id}" 
end 

И в опциях я добавил:

:methods => :url 

И это сработало.

3

Почему бы вам не добавить это поле к модели (или тому, что вы назвали @list.all). Например:

class MyModel 

    def url 
    "/url/to/page/#{id}" 
    end 

end 

и в контроллере просто добавить поле only массив

@locations = @list.all.to_json(:root => false, 
      :only => [:author,:lat,:long,:text,:url]) 
+0

это не работает – Lokuzt

+0

Я исправил ваш ответ. Но ваш помог мне найти правильный путь – Lokuzt

0

У вас есть массив после to_json, поэтому нет #merge:

@locations = @list.all.to_json(:root => false, :only => [:author,:lat,:long,:text]).collect do |l| 
    l.merge({text: 'mytext',url: 'myurl'}) 
end 
+0

получение синтаксической ошибки в ':' Ожидание} – Lokuzt

+0

Обновлен мой ответ, извините, пишу с телефона. –

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