你的问题是这样的:
@instructor.clients = @instructor.clients << User.last.id
实际上并没有@instructor.clients
以 ActiveRecord 知道的方式发生变化。
例如:
>> a = [ ]
>> b = a << 6
>> b.object_id
=> 2165471260
>> a.object_id
=> 2165471260
相同object_id
意味着相同的数组,没有人(但你)会知道它a
实际上已经改变了。
在你@instructor.clients
添加之前的同一个对象和User.last.id
你推User.last.id
到它之后的对象一样,ActiveRecord 不会意识到你已经改变了任何东西。然后你@instructor.save
和它成功地什么都不做。
您需要创建一个新数组:
@instructor.clients = @instructor.clients + [ User.last.id ]
这Array#+
会创建一个全新的数组,这会让 ActiveRecord 知道某些事情发生了变化。然后,您@instructor.save
实际上会将新数组写入数据库,并且下次您将该讲师从数据库中拉出时,更新的数组将在那里。