Rails простой способ создания хеша с определенными атрибутами, а также вложенный - PullRequest
0 голосов
/ 26 февраля 2012

В моем контроллере у меня есть:

  def search
  @sog = Konkurrencer.where("titel like ?", "%#{params[:q]}%")
  @kate = []
  @sog.each do |kat|
    h = {}
    kat.attributes.each{|k,v| h[k] = v.respond_to?(:force_encoding) ? v.dup.force_encoding("UTF-8") : v }
    @kate << h
  end
  respond_to do |format|
  format.html
  format.json { render :json => @kate }
  end

Проблема в том, что JSON содержит все атрибуты для модели.Как создать JSON, в котором есть только идентификатор, URL и заголовок?

JSON также должен содержать ключ «url», ключ которого должен быть URL-адресом для связанной фотографии.Я использую скрепку.Путь: @konkurrencer.photo.image.url

ОБНОВЛЕНИЕ: Мой search.json.erb:

[
<% @sog.each do |kon| %>
{"id":"<%= kon.id %>","titel":"<%= kon.titel %>"},
<% end %>
]

Как удалить, для последнего цикла?

Ответы [ 2 ]

1 голос
/ 26 февраля 2012

Создайте массив со списком атрибутов, которые вы хотите отобразить.Используйте select метод запроса, чтобы получить только эти поля в запросе SQL.И, наконец, цикл по этим атрибутам для заполнения массива JSON:

def search
  displayed_attributes = %w{id url titel}

  @sog = Konkurrencer.select(displayed_attributes.join(',')).where("titel like ?", "%#{params[:q]}%")
  @kate = []
  @sog.each do |kat|
    h = {}
    displayed_attributes.each do |attribute| 
       v = kat[attribute]
       h[attribute] = v.respond_to?(:force_encoding) ? v.dup.force_encoding("UTF-8") : v
    end
    @kate << h
  end
  respond_to do |format|
    format.html
    format.json { render :json => @kate }
  end
end
1 голос
/ 26 февраля 2012

Посмотрите на это и это RailsCast

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...