[英]Conditional attributes and methods in rails serializer 0.10
class Api::V1::BookSerializer < ActiveModel::Serializer
attributes :id, :status, :name, :author_name, :published_date
attributes :conditional_attributes if condition_1?
belongs_to :user if condition_2?
end
在這里,我想對控制器的基本動作設置條件。
例如,我只想為索引操作而不是其他操作發送 conditional_attributes。
但根據我的知識, rails "active_model_serializers", "~> 0.10.0" 並沒有給出任何這樣的東西。
像這樣的事情應該可以解決問題:
class Api::V1::BookSerializer < ActiveModel::Serializer
attributes :id, :status, :name, :author_name, :published_date
attribute :conditional_attribute, if: :some_condition?
belongs_to :conditional_association, if: :some_other_condition?
private
def some_condition?
# some condition
end
def some_other_condition?
# some other condition
end
end
您也可以使用:unless
條件。
如果需要,您可以在條件中使用instance_options
或instance_reflections
(請參閱https://github.com/rails-api/active_model_serializers/blob/0-10-stable/docs/howto/passing_arbitrary_options.md )或者您可以使用scope
s(見https://github.com/rails-api/active_model_serializers/blob/0-10-stable/docs/general/serializers.md#scope )
注意:據我所知,這只適用於attribute
和關聯方法——它不適用於attributes
(參見https://github.com/rails-api/active_model_serializers/blob/0-10-stable/lib /active_model/serializer.rb#L204-L210 ) 因為它不傳遞選項。
我閱讀了您關於堅持使用 AM Serializers 的評論,但我仍然會指出:如果您正在尋找比 AM Serializers 更健壯和靈活的解決方案, jsonapi-serializer或Blueprinter工作得很好,並且都支持條件字段以及條件關聯。
我假設您正在嘗試從控制器渲染。
您可以將選項從調用渲染傳遞給序列化程序:
render json: @track, serializer: Api::V1::BookSerializer, return_user: return_user?, return_extra_attributes: return_extra_attributes?
然后,您可以通過@instance_options[:your_option]
在序列化程序定義中訪問該選項。
在這里,您可能會遇到以下情況:
class Api::V1::BookSerializer < ActiveModel::Serializer
attributes :id, :status, :name, :author_name, :published_date
attributes :conditional_attributes if return_conditional_attributes?
belongs_to :user if return_user?
def return_conditional_attributes?
@instance_options[:return_extra_attributes]
end
def return_user?
@instance_options[:return_user]
end
end
return_extra_attributes?
和return_extra_attributes?
將是您的控制器中定義的方法
這里的文檔: https : //github.com/rails-api/active_model_serializers/blob/0-10-stable/docs/howto/passing_arbitrary_options.md
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.