我相信在您创建新帖子之前,您确实喜欢
@user = User.find(parmas[:id])
这意味着对象已加载到内存并分配给变量。当您创建帖子时(顺便说一句,您在哪里将其分配给用户?)从数据库加载的对象不会再次重新加载,而是在它位于内存中时被使用(它已被缓存)。
这应该有效:
@all_user_posts = @user.posts(true)
这将强制重新加载关联。
更重要的一点:永远不要使用 update_attribute 方法,因为: 1. 它正在保存一个对象(这不是这个方法的真正问题,只是值得知道它) 2. 它跳过验证!
而是使用 assign_attributes 方法,该方法接受属性哈希并且不保存对象。但是由于您正在保存它,您还可以使用 update_attributes 方法(注意末尾的“s”),它实际上运行 assign_attributes 然后保存记录(3 行合一,是的!)。您可以更进一步并在 Post 类上使用 create 方法,该方法 1. 创建新对象 2. 传递哈希的 Assign_attributes 3. 保存对象(不跳过验证)
所以前 4 行可以写成一行:
@newPost = Post.create(:title => @some_title, :completed => 0)
另一点:注意 ruby 命名约定。应该有@new_post
最后一个:您是否真的在视图中使用了所有这些变量(@newPost、@some_title、@user 和 @all_user_posts)。如果没有,则无需在它们前面添加@符号。另外我不确定你需要什么 @all_user_posts 变量,你可以简单地在你的视图中使用 @user.posts 。