2012-02-18 68 views
0

我在舊的語法如下:這個轉換到Ruby 1.9哈希

render json: [@note.to_json(:include => { :contact => { :except => [:created_at, :updated_at]}}, only: :body)], status: :created, location: [@contact, @note] 

我怎麼會做這樣的新的1.9哈希語法?我嘗試了很多不同的方式,但似乎無法理解語法。在附註中,我覺得它很混亂。

編輯:其實我已經把它與json:call混合在一起了。呸!討厭去兩個。

+0

你還有什麼我們可以看到的代碼的最新嘗試? – summea 2012-02-18 05:05:07

+3

沒有舊的*語法,只有一個新的語法可用於有限的散列文字集。使用'=>'沒有什麼問題,事實上,如果你的鍵不是符號,或者它們是像':$ in'或':'this.that''這樣的符號,就必須使用它。 – 2012-02-18 05:07:07

+0

我已經嘗試了很多變體,但是當我包含{}時它會一直拋出錯誤。似乎那裏的哈希嵌套會導致混淆,並且在我看來很難閱讀。謝謝,畝。我討厭我不得不在兩者之間,但是在將來的代碼版本中看到新的可選語法並且不習慣看到它,我們不會很高興。 – Steve 2012-02-18 05:07:09

回答

3

我不知道在哪裏的問題是,但倒也乾脆轉換成這樣:

render json: [@note.to_json(include: { contact: { except: [:created_at, :updated_at]}}, only: :body)], status: :created, location: [@contact, @note] 

順便說一句,在一行拉絲這麼多的嵌套結構結合在一起,勢必會造成混亂。分解它,使其可讀(和可寫)。

0

你的例子工作正常。只需要從一些細微的改變而改變了幾個鍵

require 'pp' 
pp json: [ 
    { 
     include: { 
     contact: { 
      except: [:created_at, :updated_at] 
     } 
     }, 
     only: :body 
    } 
    ], 
    status: :created, 
    location: %w[contact note] 

所以,除了要解決的對象,我沒有獲得(@contact和@note)唯一的,我改變了

:include => { :contact => { :except => 

include: { contact: { except: 

此外,你可能會考慮使用rabl對於這樣的事情。