0

Railsアプリケーションでユーザー間でレッスンを共有したいと思っています。ユーザーAがいくつかのレッスンを作成し、それをユーザーB&Cと共有したいと考えています。ユーザーAがレッスンを作成し、ユーザーB&Cをレッスンに追加すると、ユーザーはレッスンを見ることができます。私の問題は、共有レッスンをユーザーのB&C共有ページに表示する方法です。各レッスンはノートブックに属しています。

Notebook.rb

belongs_to :user
has_many :lessons, :dependent => :destroy

lesson.rb

belongs_to :notebook
has_many :shareships
has_many :users, through: :shareships, dependent: :destroy
attr_reader :user_tokens
accepts_nested_attributes_for :shareships, :reject_if => lambda { |a| a[:user_ids].blank? }
scope :shared, lambda { where('shared_ids = ?') 

user.rb

has_many :notebooks, dependent: :destroy 

shareship.rb

belongs_to :lesson
belongs_to :user

lessons_controller.rb

class LessonsController < ApplicationController
  before_filter :authorize, :find_notebook
  load_and_authorize_resource :through => :notebook, :except => [:public]
  respond_to :html, :js, :json 


  def create
    @lesson = @notebook.lessons.build(params[:lesson])
    @lesson.user_id = current_user.id
    flash[:notice] = 'lesson Added!.' if @lesson.save
    respond_with(@lesson, :location => notebook_lessons_path)
  end


    def shared
      @user = current_user
      @shared = @notebook.lessons
    end
end

ユーザーが他のユーザーをレッスンに追加できるように、ユーザーとレッスンの間に多対多の関連付けを設定しましたが、共有ユーザーのレッスンを一覧表示する方法を見つけようとしています。これを機能させる方法はありますか?それとコントローラーとビューのセットアップに問題があります。

4

1 に答える 1

1

私はこのようなことをします

ノートブック.rb

has_many :lessons
belongs_to :user

レッスン.rb

belongs_to :notebook
has_many :shareships
has_many :users, through: :shareships, dependent: :destroy # shared users of this lesson, not the owner

user.rb

has_many :notebook # the user will go through the notebook to get the lesson he owns
has_many :shareships
has_many :lessons, through: :shareships, dependent: :destroy # this would be only the shared lessons he has access to

shareship.rb

belongs_to :lesson
belongs_to :user

ユーザーは自分が所有するレッスンにアクセスできます

/:user_id/notebooks/:notebook_id/lesson/:lesson_id 
# lessons = user.notebooks[:notebook_id].lessons

そして、彼は共有されたレッスンに次の方法でアクセスできます

/:user_id/shared_lessons/:lesson_id
# shared_lessons = user.lessons

ユーザーは自分が所有するレッスンに直接アクセスすることはできず、ノートブックを確認する必要があります。しかし、彼は共有されたレッスンに直接アクセスできます。

どう思いますか ?

于 2012-08-15T00:35:21.577 に答える