Вы писали:
Эти примеры выглядят так, как будто они должны работать, но по какой-то причине user_id остается неизменным. Может быть, это как-то связано с проверками
Вы можете легко проверить, связано ли это с проверками, заменив "save"
на "save!"
Первый просто возвращает false, если какая-либо из проверок завершилась неудачей, тогда как последний вызовет исключение:
p = Post.find(1)
p.user = User.find(5)
p.save!
В качестве альтернативы, вы также можете сделать следующее в консоли Rails:
>> p = Post.find(1)
...
>> p.user = User.find(5)
...
>> p.valid?
...
>> # will be either true or false, depending on validations
>> p.errors.full_messages
...
>> # will be either [] or else a non-empty array of all validation failures
>> _
Удачи!