Ruby on rails 将属于关系的对象传递回模型

Ruby on rails 将属于关系的对象传递回模型,ruby-on-rails,ruby,Ruby On Rails,Ruby,我有一个与学校有关联的用户模型(用户包含一个名为school_id的外键)。当用户注册(或创建)时,用户可以选择指定他们就读的学校。我目前遇到的问题是,一旦用户通过学校名称,我不确定如何设置学校id。我当前收到的错误为“nil:NilClass的未定义方法'id'”: class用户

我有一个与学校有关联的用户模型(用户包含一个名为school_id的外键)。当用户注册(或创建)时,用户可以选择指定他们就读的学校。我目前遇到的问题是,一旦用户通过学校名称,我不确定如何设置学校id。我当前收到的错误为“nil:NilClass的未定义方法'id'”:

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>