首先这是我的第一个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
工作正常。
答案 0 :(得分:2)
创建新项目时,除非您在迁移中设置了某种类型的默认值,否则所有关联都将默认为nil。你可以在那里做一些事情。
首先,您可以手动设置用户:
@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关联是什么,否则关联将无效。