문제
위젯 세트로 구성된 사용자 정의 페이지가있는 사이트를 작성하고 있습니다.
위젯은 블로거에서 찾을 수있는 것과 비슷하며 상당히 기본적입니다. 일부 위젯은 기본 구조 (목록, 테이블)로 데이터 수집/서식 프레젠테이션을위한 것이며 다른 위젯은보다 복잡한 기능 (블로그, 사진 앨범 등)을 제공합니다.
사용자가 페이지에 나타나는 위젯을 선택하고 재정렬 할 수 있습니다.
위젯이 STI (예 : BlogWidget, GalleryWidget)가되는 것을 고려하고 있었고 각 위젯 인스턴스에는 fkey user_id와 정렬 위치가 있습니다.
그런 다음 사용자의 show.html.erb에는 다음이 포함됩니다.
for widget in current_user.widgets
render widget
end
더 좋은 방법이 있습니까?
해결책 2
나는 다음과 같은 것을 구현하게되었습니다.
class Placement < ActiveRecord::Base
belongs_to :widget, :polymorphic => true
belongs_to :container, :polymorphic => true
acts_as_double_polymorphic_join(
:widgets =>[:blogs, :galleries, :twitter_feeds],
:containers => [:pages, :users, :groups]
)
acts_as_list :scope => :container
end
다른 팁
"위젯"과 "userwidgets"라는 두 가지 모델을 만들려고합니다.
Widgets:
ID (Primary Key)
Name
Description
etc...
UserWidgets:
ID
Position
Widget_ID (Foreign Key -> Widgets.ID)
User_ID (Foreign Key -> Users.ID)
적절한 연결을 설정하여 간단히 @user.widget을 수행하여 모든 위젯 목록을 얻을 수 있습니다. 데이터베이스에있는 이름과 동일하게 위젯 이름을 지정하면보기/레이아웃/부분에서 다음을 수행 할 수 있습니다.
<% @user.widgets do |w| %>
<%= javascript_include_tag w.name %>
<% end %>
물론 이것은 각 위젯을 자체 자체 포함 된 JavaScript 파일 (내가 선호하는 방법)으로 분리한다고 가정합니다.
제휴하지 않습니다 StackOverflow