1

首先,这是我的第一个 Rails 应用程序,所以请放纵...我阅读了http://guides.rubyonrails.org/association_basics.html中的 Rails 关联指南,然后开始编写我自己的项目。我的问题是我不能做像@project.user.email 这样的事情,因为@project.user 似乎一直都是零。这发生在所有对象上。@user.role.name 还会抛出“nil:NilClass 的未定义方法”;我确定我在模型定义方面做错了,但我不明白它是什么。我感谢您的帮助。谢谢。

   class Role < ActiveRecord::Base
      has_many :users
      attr_accessible :name
   end

   class User < ActiveRecord::Base
      belongs_to :role
      has_many :projects
      attr_accessible :email, :password, :password_confirmation, :role_id, :role  
   end

   class Project < ActiveRecord::Base
      belongs_to :user
      belongs_to :project_type
      attr_accessible :id, :project_type_id, :title, :description  
   end

   class Project_Type < ActiveRecord::Base
      has_many :projects
      attr_accessible :name
   end

例如,我所做的项目的索引视图(HAML):

   %td= proyecto.user.email

这是行不通的。然而,

   %td= proyecto.user_id

工作正常。

4

1 回答 1

2

当您创建一个新项目时,所有关联都将默认为零,除非您在迁移中设置了某种类型的默认值。你可以在那里做几件事。

首先,您可以手动设置用户:

@user = User.find(5)
@project = Project.new
@project.user = @user

此外,您可以从用户那里构建新项目。该build方法是从has_many关联中自动添加的。

@user = User.find(5)
@project = @user.projects.build

现在@project将包含一个与 id 为 5 的用户关联的项目。您还需要确保告诉 Rails 关联是什么,否则关联将不起作用。

于 2013-02-06T20:21:25.833 回答