仅显示属于用户的项目的问题

时间:2012-11-21 16:41:42

标签: ruby-on-rails ruby-on-rails-3 activerecord

所以我正在构建一个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相关,在我的模型中:

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项目......

我在创作上做错了什么?如果需要,我可以显示更多代码,但我认为这将是最有用的。

1 个答案:

答案 0 :(得分:2)

似乎在index的{​​{1}}方法中,您正在获取所有已创建的项目。如果要仅显示由current_user创建的项目,则只应获取这些记录。

即。它应该是

users_controller

你现在拥有的是(可能是)

       @projects = current_user.projects

同样在上面的show方法中,执行current_user.projects @projects = Projects.all 没有任何意义。

.all将获取您需要的记录。