5

Có thể có điều kiện bao gồm một liên kết has_one trong bộ nối tiếp mô hình đang hoạt động trên cơ sở từng bản ghi không?Active Serializer mô hình có điều kiện

Trong trường hợp của tôi, tôi không cần phải trả lại liên kết được gọi là "nhóm" nếu nhóm thuộc loại "ẩn". Đây là một đoạn trích từ serializer của tôi.

class PostFeedSerializer < ActiveModel::Serializer 
    attributes :id, :title, :thumbnail_photo, :view_count, :ago, :created_by 
    has_one :group, serializer: GroupSerializer 

Những gì tôi muốn làm là một cái gì đó để tác động của:

has_one :group, serializer: GroupTinySerializer unless object.get_group.invisible? 
+0

Liệu Nhóm có một lĩnh vực được gọi là 'invisible'? Và bạn đã định nghĩa các phương thức như 'invisible?' Và 'get_group' hay đó chỉ là một ví dụ. –

+0

Có, get_group và vô hình? là các phương pháp hiện có. – Dan

Trả lời

12

Giả sử bạn đang using version ~> 0.8.0, bạn sẽ có thể đặt sau đây trong PostFeedSerializer của bạn.

def include_group? 
    !object.get_group.invisible? 
end 

Đó có điều kiện sẽ bao gồm các đối tượng group bất cứ khi nào include_group? trả về true.

Có vẻ như in future versions, AMS sẽ chuyển sang filter thay vì include_x? phương pháp.

+1

Cảm ơn Aron. Đó là điều tuyệt vời nhất kể từ khi cắt lát bánh mì! – Dan

+1

Nó có thể mát hơn bánh mì cắt lát. Cả hai đều tốt. – Fuser97381

+1

tài liệu về tài liệu này ở đâu? – Jwan622

1

Đối với bất cứ ai sử dụng một phiên bản mới hơn của Active Mẫu Serializer, giải pháp sẽ là:

def filter(keys) 
    keys.delete :group unless !object.get_group.invisible? 
    keys 
    end 

Bạn cũng có thể làm:

has_one :group, serializer: GroupTinySerializer, unless: -> { invisible? } 

def invisible? 
    object.get_group.invisible? 
end 
+0

Tôi sợ Trình kích hoạt mô hình hoạt động mới hơn. Quá nhiều thay đổi. – Dan

+1

Tôi đã thêm một cách khác bạn cũng có thể đạt được kết quả tương tự. Đừng sợ thay đổi châu chấu nhỏ của tôi. – FutoRicky

Các vấn đề liên quan