我正在创建一个用于在用户之间上传和共享文件的应用。 我有User和Files模型并创建了第三个File_Sharing_Relationships模型,其中包含sharer_id,file_id和shared_with_id列。我希望能够创建以下方法:
@upload.file_sharing_relationships - lists users that the file is shared with
@user.files_shared_with - lists files that are shared with the user.
@user.files_shared - lists files that the user is sharing with others
@user.share_file_with - creates a sharing relationship
是否存在任何rails关联,例如我可以使用'polymorphic'来建立这些关系?
任何建议表示赞赏。感谢。
答案 0 :(得分:1)
您需要做的就是阅读Rails指南并应用您学到的所有知识。
基本上您需要存储以下信息:
所以:
class SharedItem < ActiveRecord::Base
belongs_to :sharable, :polymorphic => true #this is user, please think of better name than "sharable"...
belongs_to :resource, :polymorphic => true #can be your file
belongs_to :user
end
您需要SharedItem:
user_id: integer, sharable_id: integer, sharable_type: string, resource_id: integer, resource_type: string
然后你可以通过编写命名范围来获得你指定的“方法”,如:
named_scope :for_user, lambda {|user| {:conditions => {:user_id => user.id} }}
或指定适当的关联:
class File < ActiveRecord::Base
has_many :shared_items, :as => :resource, :dependent => :destroy
end
答案 1 :(得分:0)
我认为你应该建立这样的关系:
class User
has_many :files
has_many :user_sharings
has_many :sharings, :through => :user_sharings
end
class File
belongs_to :user
end
class Sharing
has_many :user_sharings
has_many :users, :through => :user_sharings
end
class UserSharing
belongs_to :user
belongs_to :sharing
end
..这是非常基本的关系模型(这只是我的观点:))。用户可以拥有许多sharings,也属于sharings。创建用户及其共享时,可以将文件ID设置为UserSharing表。然后,您可以在适当的模型中创建上面列出的方法scopes
。我希望我帮助你一点。