尝试创建新人时,我在第if @persons.save
行上收到以下错误:
PeopleController中创建的NoMethodError, 未定义的方法`save'代表nil:NilClass
非常感谢任何有关如何修复的想法,谢谢。
控制器
# GET /people/new
def new
@person = current_user.person.build
end
# GET /people/1/edit
def edit
end
# POST /people
# POST /people.json
def create
@person = current_user.person.build(person_params)
respond_to do |format|
if @person.save
format.html { redirect_to @person, notice: 'Person was successfully created.' }
format.json { render action: 'show', status: :created, location: @person }
else
format.html { render action: 'new' }
format.json { render json: @person.errors, status: :unprocessable_entity }
end
end
end
用户模型
class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
has_many :person
end
人物模型
class Person < ActiveRecord::Base
has_many :user
has_paper_trail
acts_as_taggable
@tags = Person.acts_as_taggable_on :tags
def admin_permalink
admin_post_path(self)
end
end
答案 0 :(得分:1)
您似乎想要一种用户可以拥有多人并且一个人可以拥有多个用户的关系。
这需要一种名为has_many through
的特殊关联类型。
基本上,用户可以与许多人相关联,反之亦然,:through
第三个模型称为连接表。
e.g
class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
has_many :people, through: :relationships # The model name(person) is pluralised for has_many associations
end
class Person < ActiveRecord::Base
has_many :users, through: :relationships # user needs to be pluralised here
has_paper_trail
acts_as_taggable
@tags = Person.acts_as_taggable_on :tags
...
end
class Relationship < ActiveRecord::Base # This is the join table
belongs_to :user
belongs_to :person
end
这要求您在数据库中创建relationship
表(而不是关系,将其称为最有意义的任何内容)。它需要person_id
和user_id
整数列。
在您的控制器中,您还需要使用复数版本:
@person = current_user.people.build(person_params)
你应该好好阅读rails association guide。特别是has_many through部分。
还有另一种称为has_and_belongs_to_many的关联,可能更适合您的情况。根据我的经验,这通常看起来更容易,但与has_many through
相比最终导致头痛。