JSONAPI-Resources / JSONAPI-Resources/jsonapi-resources
Including composed relationships
Chưa có ai nhận issue này.
- Ngôn ngữ chính
- Ruby
- Star
- 2.3k
- Fork
- 546
- Chỉ số merge pull request
- Không có pull request nào được merge trong 30 ngày
Mô tả
I want to find out how to handle symmetric relationships with JSON API (and an Ember.js front-end). I have the following models:
class Person < ActiveRecord::Base
has_many :friended, through: :friender_friendships, class_name: Person
has_many :friended_by, through: :friended_friendships, source: :friended, class_name: Person
has_many :friender_friendships, class_name: Friendship, foreign_key: "friender_id"
has_many :friended_friendships, class_name: Friendship, foreign_key: "friended_id"
def friendships
Friendship.where("friender_id = ? OR friended_id = ?", id, id);
end
end
class Friendship < ActiveRecord::Base
belongs_to :friender, class_name: Person
belongs_to :friended, class_name: Person
end
And the current resources:
class PersonResource < JSONAPI::Resource
attributes :name
relationship :friender, to: :many, class_name: "Person"
relationship :friended_by, to: :many, class_name: "Person"
relationship :friender_friendships, to: :many, class_name: "Friendship"
relationship :friended_friendships, to: :many, class_name: "Friendship"
relationship :friendships, to: :many, class_name: "Friendship"
end
class FriendshipResource < JSONAPI::Resource
has_one :friender
has_one :friended
attributes :strength
end
When looking at a person's profile, I would like to show all friendships of that person, whether they are on the "friender" or the "friended" end of the relationship. When I'm fetching the person resource, I pass include=friendships so that all friendships are also returned and I don't need further requests to fetch friendship data.
However, that fails with the following error:
Association named 'friendships' was not found on Person; perhaps you misspelled it?
The reason for this is that jsonapi_resources eventually calls records.includes(relationship) (see here), and since friendships is not a real relationship, ActiveRecord throws an error.
I'm not really sure how to solve this with jsonapi_resources. It might be possible to turn friendships into a "real" hasMany relationship with AR, but I haven't found a way to do that (although it's possible my AR-fu is just lacking).
If not with AR, is there a way to solve this problem with jsonapi_resources? (without making an extra roundtrip to the server). Thank you.
Hướng dẫn đóng góp
Chưa lập chỉ mục được hướng dẫn đóng góp cho kho mã nguồn này
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Hướng nghiên cứu
Đọc lib/jsonapi/resource.rb#L533-L541 và các định nghĩa PersonResource và FriendshipResource được nêu trong issue. Theo dõi cách include=friendships đi tới records.includes(relationship), sau đó xác định relationship hoặc đường dẫn inclusion được hỗ trợ nào có thể biểu diễn cả hai đầu của friendship. Hoàn tất khi response của một person bao gồm tất cả friendship trong một request mà không có missing-association error.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Công nghệ
- rails, ruby
- Lĩnh vực
- api, backend
- Loại issue
- Tính năng
- Độ khó
- 5/5
- Thời gian dự kiến
- Hơn một tuần
- Mức độ hoạt động
- Đình trệ
- Độ rõ ràng
- Cần làm rõ
- Mức phù hợp với người mới
- 25/100