Синтаксис массива в JSON в рельсах 3 на Heroku - PullRequest
1 голос
/ 12 декабря 2011

У меня есть следующий код контроллера:

  def index
    @profiles = Profile.where("(first_name || ' ' || last_name) ILIKE ?", "%#{params[:q]}%")

    @autolist = []
    @profiles.each do |profile|
      user = User.find_by_id(profile.user_id)
      @autolist.concat([{"id",profile.id,"name",profile.first_name+" "+profile.last_name,"email",user.email}])
    end    

    respond_to do |format|
      format.html # index.html.erb
      format.json { render :json => @autolist }
      end
  end

Он работает в моей локальной среде, но вызывает сбой моего приложения.В частности, эта строка: @autolist.concat([{"id",profile.id,"name",profile.first_name+" "+profile.last_name,"email",user.email}])

Есть идеи?

У меня есть ощущение, что это связано с моим локальным env с использованием ruby ​​1.8.7 и приложением heroku, работающим 1.9.2

1 Ответ

2 голосов
/ 12 декабря 2011

Это работает в 1.8.7:

>> h = {"id", 6}
=> {"id"=>6}

, но не в 1.9.2:

>>  h = {"id",6}
SyntaxError: (irb):4: syntax error, unexpected ',', expecting tASSOC
 h = {"id",6}
           ^
    from /Users/mu/Developer/.rvm/rubies/ruby-1.9.2-p180/bin/irb:16:in `<main>'

Обозначение ракеты будет служить вам лучше:

@autolist.concat([{ "id" => profile.id, "name" => profile.first_name + " " + profile.last_name, "email" => user.email}])

Я не могу найти упоминания об этом изменении в примечаниях к выпуску 1.9.1 или 1.9.2, и это фактически первый раз, когда я вижу синтаксис {'a', b} для Ruby Hash.Возможно, эта нотация была устаревшей функцией, которая наконец исчезла.

Кстати, разработка на 1.8.7 и развертывание на 1.9.2 - не лучшая идея.

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