我目前正在使用 Rails 6.0 构建一个仅限 Rails API 的应用程序。我正在使用fast_jsonapi进行 JSON:API 序列化 Ruby 对象。现在我只创建了UsersController
.
我有一个user
具有以下属性的模型:
ActiveRecord::Schema.define(version: 2020_03_14_175719) do
create_table "users", force: :cascade do |t|
t.string "first_name"
t.string "last_name"
t.string "username"
t.string "password_digest"
t.string "email"
t.string "phone"
t.text "address"
t.datetime "created_at", precision: 6, null: false
t.datetime "updated_at", precision: 6, null: false
t.index ["email"], name: "index_users_on_email", unique: true
t.index ["username"], name: "index_users_on_username", unique: true
end
end
Run Code Online (Sandbox Code Playgroud)
我user_serializer
为它创建了一个:
class UserSerializer
include FastJsonapi::ObjectSerializer
attributes :first_name, :last_name, :username, :password, :email, …
Run Code Online (Sandbox Code Playgroud) 我有一个带有由fast_jsonapi gem序列化的模型的Rails api。
我的模型如下所示:
class Shift < ApplicationRecord
belongs_to :team, optional: true
...
Run Code Online (Sandbox Code Playgroud)
class Team < ApplicationRecord
has_many :shifts
...
Run Code Online (Sandbox Code Playgroud)
这就是序列化器的样子
class ShiftSerializer
include FastJsonapi::ObjectSerializer
...
belongs_to :team
...
end
Run Code Online (Sandbox Code Playgroud)
序列化工作。但是,即使我包含复合团队文档:
def index
shifts = policy_scope(Shift).includes(:team)
options = {}
options[:include] = [:team, :'team.name', :'team.color']
render json: ShiftSerializer.new(shifts, options)
end
Run Code Online (Sandbox Code Playgroud)
我仍在像这样格式化对象:
...
relationships: {
team: {
data: {
id: "22",
type: "Team"
}
}
}
Run Code Online (Sandbox Code Playgroud)
而我期望也能获得团队模型的属性。
我有一个控制器方法drop_down_values
,在其中选择一组值并以 json 响应,使用序列化器构建对象。我正在使用 FastJson Api。我想知道,如何访问序列化器中控制器中存在的其他变量。
def drop_down_values
@drop_down_values = IndustrySectorList.all
@values = @drop_down_values.pluck(:industry_sector)
render json: DropDownValueSerializer.new(@drop_down_values).serialized_json
end
Run Code Online (Sandbox Code Playgroud)
我需要@values
在序列化器中使用该变量。我如何将其传递给序列化器?我无法在序列化器中直接访问此变量。
序列化器:
class DropDownValueSerializer
include FastJsonapi::ObjectSerializer
attributes :id
end
Run Code Online (Sandbox Code Playgroud)
堆栈和版本 -
serialization ruby-on-rails json-api ruby-on-rails-5.2 fastjsonapi