[英]How to use as_json in a controller to return a model's method display_name?
在我的用戶模型中,我有一個display_name方法來輸出用戶的全名。
user.rb (id, first_name, last_name, email, ...)
def display_name
[first_name, last_name].compact.join(' ')
end
我試圖讓我的控制器像這樣返回display_name:
def show
json_response({
user: user.as_json(only: [:id, :display_name, :email])
})
end
問題是,控制器僅發送ID和電子郵件,而不發送display_name。我在做什么錯?
根據文檔 :
要在模型上包含某些方法調用的結果,請使用:methods:
user.as_json(methods: :permalink)
# => { "id" => 1, "name" => "Konata Izumi", "age" => 16,
# "created_at" => "2006/08/01", "awesome" => true,
# "permalink" => "1-konata-izumi" }
也:
選項include_root_in_json控制as_json的頂級行為。 如果為true,則as_json將發出一個以對象類型命名的根節點。 include_root_in_json選項的默認值為false。
user = User.find(1)
user.as_json
# => { "id" => 1, "name" => "Konata Izumi", "age" => 16,
# "created_at" => "2006/08/01", "awesome" => true}
ActiveRecord::Base.include_root_in_json = true
user.as_json
# => { "user" => { "id" => 1, "name" => "Konata Izumi", "age" => 16,
# "created_at" => "2006/08/01", "awesome" => true } }
也可以通過將:root選項設置為true來實現此行為,如下所示:
user = User.find(1)
user.as_json(root: true)
# => { "user" => { "id" => 1, "name" => "Konata Izumi", "age" => 16,
# "created_at" => "2006/08/01", "awesome" => true } }
因此,可能類似於以下內容:
user.as_json(only: [:id, :email], methods: :display_name, root: true)
你可以做:
user.as_json(only: [:id, :email], methods: [:display_name])
要么
user.as_json(only: [:id, :email]).merge({'display_name': user.display_name})
或者有一個序列化器
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.