Ruby on rails 将属于关系的对象传递回模型
我有一个与学校有关联的用户模型(用户包含一个名为school_id的外键)。当用户注册(或创建)时,用户可以选择指定他们就读的学校。我目前遇到的问题是,一旦用户通过学校名称,我不确定如何设置学校id。我当前收到的错误为“nil:NilClass的未定义方法'id'”:Ruby on rails 将属于关系的对象传递回模型,ruby-on-rails,ruby,Ruby On Rails,Ruby,我有一个与学校有关联的用户模型(用户包含一个名为school_id的外键)。当用户注册(或创建)时,用户可以选择指定他们就读的学校。我目前遇到的问题是,一旦用户通过学校名称,我不确定如何设置学校id。我当前收到的错误为“nil:NilClass的未定义方法'id'”: class用户
class用户
查看
<div>
<%= f.label :school %>
<%= f.autocomplete_field :school, autocomplete_school_name_suggestions_path %>
</div>
试试:
型号:
class User < ActiveRecord::Base
extend FriendlyId
belongs_to :school
#... other code
before_validation :find_school_id
def school_name=(value)
self.school = School.find_by(name: value)
end
def school_name
school && school.name
end
end
class用户
视图:
你不能只添加一个attr\u accessor school\u名称来添加内容吗?@thestig-不行。attr_accessor基于实例变量创建setter和getter方法,我们希望它们基于关联的对象。好的,我之所以这样问是因为我无法使用您提供的代码。通过addattr_访问器,我可以让它工作。我会调查的你犯了什么错误?使用attr_访问器不会引发任何问题,但也不会将关联存储在数据库中。应该使用find_by而不是setter中的find。此外,如果没有学校联系,获得者可能会加薪。答案已更新。
class User < ActiveRecord::Base
extend FriendlyId
belongs_to :school
#... other code
before_validation :find_school_id
def school_name=(value)
self.school = School.find_by(name: value)
end
def school_name
school && school.name
end
end
<div>
<%= f.label :school_name %>
<%= f.autocomplete_field :school_name, autocomplete_school_name_suggestions_path %>
</div>