1

そこで、プロジェクトなどを表示できるRailsアプリを構築しています。プロジェクトコントローラーに次のコードがあります。

  def create
    @project = Project.create(params[:project].merge(:user_id => current_user.id))
    if @project.save
      redirect_to project_path(@project), :flash => {:success => 'We have created your project'}
    else
      redirect_to :back, :flash => {:error => 'Cannot allow an empty project name'}
    end
  end

これにより、私が理解していることから、ユーザーのIDに基づいて、ユーザーのIDに関連するプロジェクトが、次のモデルで作成されます。

class Project < ActiveRecord::Base
  attr_accessible :project_title, :user_id

  has_many :categories, :order => 'position', :dependent => :destroy
  has_many :tasks, :dependent => :destroy
  has_many :discussions, :dependent => :destroy
  has_many :users

  belongs_to :user

  validates :project_title, :presence => true
end

更新:ユーザーのプロジェクトを表示するためのユーザーコントローラーの表示アクション

  def show
    @user = current_user

    @projects = current_user.projects.all
    @tasks = current_user.tasks.all
    @categories = current_user.categories.all
    @discussions = current_user.discussions.all
  end

*プロジェクトコントローラーのインデックスアクションを表示するように更新されました*

  def index
    @project  = Project.new
    @projects = Project.all
  end

そのことを念頭に置いて、なぜユーザーbobにプロジェクトを作成させ、ログアウトさせ、ユーザーjakeにログインしてユーザーbobsプロジェクトを表示させることができるのか疑問に思っています...

作成時に何か間違ったことをしていますか?必要に応じてさらに多くのコードを表示できますが、これが最も役立つと思いました。

4

1 に答える 1

2

indexメソッドではusers_controller、作成されたすべてのプロジェクトをフェッチしているようです。current_userによって作成されたプロジェクトのみを表示する場合は、それらのレコードのみをフェッチする必要があります。

すなわちそれはあるべきです

       @projects = current_user.projects

そしてあなたが今持っているのは(多分)

       @projects = Projects.all

また、上記のshowメソッドでは、current_user.projects.allを実行しても意味がありません。

current_user.projects必要なレコードをフェッチします。

于 2012-11-21T17:04:54.113 に答える