Ruby on rails 构建vs新问题

Ruby on rails 构建vs新问题,ruby-on-rails,Ruby On Rails,有人遇到过这个问题吗 我有一组注释,我在视图中正常循环: <% for comment in @post.comments %> <%= comment.body %> <% end %> 但是我也有一个表单来添加注释,但是如果我在控制器中使用@post.comments.build而不是comment.new,它似乎会在循环中创建一个空白的“comment”实例 我更喜欢使用。构建而不是。新建 有人遇到过这种情况吗?有黑客吗 谢谢你说的很有趣,我几

有人遇到过这个问题吗

我有一组注释,我在视图中正常循环:

<% for comment in @post.comments %>
  <%= comment.body %>
<% end %>

但是我也有一个表单来添加注释,但是如果我在控制器中使用@post.comments.build而不是comment.new,它似乎会在循环中创建一个空白的“comment”实例

我更喜欢使用。构建而不是。新建 有人遇到过这种情况吗?有黑客吗


谢谢

你说的很有趣,我几天前遇到了这个问题

我最终选择了
Model.new
,但您也可以在调用
build
后尝试重新加载关联

@post.comments(true)
将重新加载它。(为了便于阅读,您还可以编写
@post.comments(:force_reload)
。)

重新加载的替代方法可能是调用关联的
all
命名范围,因此
@post.comments.all

我认为两者都会发出一个新的查询,但它们可能会命中查询缓存

@comments = @post.comments
@comment  = @post.comments.build

我想这样就可以了。

不错,我要试一试。我本以为New和Build非常接近,所以New也会出现,但我猜不会。使用Build,您可以从关联中创建一个新对象,部分原因是它修改了关联。当您直接从Comment类实例化时,它不知道加载了什么关联,也不知道它正在初始化的对象是否与它们有任何可能的关系。