2017-08-02 50 views
0

我試圖通過JBuilder中,使這個JSON連字符使用,而不是下劃線

{ 
    "query": { 
    "bool": { 
     "must": [ 
     { "match": { "source-id":2}} 
     ] 
    } 
    } 
} 

這裏Jbuilder的JSON關鍵是我的代碼

query = Jbuilder.encode do |json| 
        json.query do 
        json.bool do 
         json.must do 
         json.match do 
          json.source-id source.id 
         end 
         end 
        end 
        end 
       end 

我得到這個錯誤消息

syntax error, unexpected tIDENTIFIER, expecting keyword_do or '{' or '(' json.source-id source.id ^from /Users/amir/.rvm/gems/ruby-2.3.0/gems/railties-5.0.2/lib/rails/commands/console.rb:65:in start' from /Users/amir/.rvm/gems/ruby-2.3.0/gems/railties-5.0.2/lib/rails/commands/console_helper.rb:9:in start' from /Users/amir/.rvm/gems/ruby-2.3.0/gems/railties-5.0.2/lib/rails/commands/commands_tasks.rb:78:in console' from /Users/amir/.rvm/gems/ruby-2.3.0/gems/railties-5.0.2/lib/rails/commands/commands_tasks.rb:49:in run_command!' from /Users/amir/.rvm/gems/ruby-2.3.0/gems/railties-5.0.2/lib/rails/commands.rb:18:in <top (required)>' from /Users/amir/.rvm/gems/ruby-2.3.0/gems/activesupport-5.0.2/lib/active_support/dependencies.rb:293:in require' from /Users/amir/.rvm/gems/ruby-2.3.0/gems/activesupport-5.0.2/lib/active_support/dependencies.rb:293:in block in require' from /Users/amir/.rvm/gems/ruby-2.3.0/gems/activesupport-5.0.2/lib/active_support/dependencies.rb:259:in load_dependency' from /Users/amir/.rvm/gems/ruby-2.3.0/gems/activesupport-5.0.2/lib/active_support/dependencies.rb:293:in require' from /Users/amir/source/innovate/self_driving_ideas/bin/rails:9:in ' from /Users/amir/.rvm/gems/ruby-2.3.0/gems/activesupport-5.0.2/lib/active_support/dependencies.rb:287:in load' from /Users/amir/.rvm/gems/ruby-2.3.0/gems/activesupport-5.0.2/lib/active_support/dependencies.rb:287:in block in load' from /Users/amir/.rvm/gems/ruby-2.3.0/gems/activesupport-5.0.2/lib/active_support/dependencies.rb:259:in load_dependency' from /Users/amir/.rvm/gems/ruby-2.3.0/gems/activesupport-5.0.2/lib/active_support/dependencies.rb:287:in load' from /Users/amir/.rvm/gems/ruby-2.3.0/gems/spring-1.7.2/lib/spring/commands/rails.rb:6:in call' from /Users/amir/.rvm/gems/ruby-2.3.0/gems/spring-1.7.2/lib/spring/command_wrapper.rb:38:in call' from /Users/amir/.rvm/gems/ruby-2.3.0/gems/spring-1.7.2/lib/spring/application.rb:191:in block in serve' from /Users/amir/.rvm/gems/ruby-2.3.0/gems/spring-1.7.2/lib/spring/application.rb:161:in fork' from /Users/amir/.rvm/gems/ruby-2.3.0/gems/spring-1.7.2/lib/spring/application.rb:161:in serve' from /Users/amir/.rvm/gems/ruby-2.3.0/gems/spring-1.7.2/lib/spring/application.rb:131:in block in run' from /Users/amir/.rvm/gems/ruby-2.3.0/gems/spring-1.7.2/lib/spring/application.rb:125:in loop' from /Users/amir/.rvm/gems/ruby-2.3.0/gems/spring-1.7.2/lib/spring/application.rb:125:in run' from /Users/amir/.rvm/gems/ruby-2.3.0/gems/spring-1.7.2/lib/spring/application/boot.rb:19:in <top (required)>' from /Users/amir/.rvm/rubies/ruby-2.3.0/lib/ruby/site_ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in require' from /Users/amir/.rvm/rubies/ruby-2.3.0/lib/ruby/site_ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'

回答

1

問題是在source-id鑰匙名稱中有連字符。嘗試這樣做,如果source_id作爲關鍵。

query = Jbuilder.encode do |json| 
       json.query do 
       json.bool do 
        json.must do 
        json.match do 
         json.source_id source.id 
        end 
        end 
       end 
       end 
      end 

更新::

否則,你可以做到這一點拿到鑰匙格式化:

Jbuilder.encode do |json| 
    json.key_format! ->(key) { (key=="source_id") ? "source-id" : key} 
    json.query do 
    json.bool do 
     json.must do 
     json.match do 
      json.source_id source.id 
     end 
     end 
    end 
    end 
end 

轉換所有字符串:

Jbuilder.encode do |json| 
    json.key_format! :dasherize 
    json.query do 
    json.bool do 
     json.must do 
     json.match do 
      json.source_id source.id 
     end 
     end 
    end 
    end 
end 

或使用set!語法像json.set! "source-id", source.id

+0

不,我不希望它是下劃線,它應該是連字符 – Mini

+0

你將不得不使用另一種方法來格式化鍵,如果它只是source_id,你想用hypen然後硬編碼它,就像我已經顯示的那樣。否則使用'gsub(「_」,「 - 」)作爲格式化程序 –

+0

第二個錯誤ArgumentError:錯誤的參數數量(給定0,預期1) – Mini

相關問題