1

在 show 动作中,有一个逻辑需要我定义:

@object.nested_object.new (or @object.nested_object.build or @object.nested_object.create)

但是,当是时候使用类似的东西显示nested_objects 列表时:

@object.nested_objects.each do |nested_objects|
  #display
end

使用@object.nested_object.new 创建的临时嵌套对象有一个额外的行项。

有没有办法在显示实际嵌套对象列表之前强制删除该临时对象?

或者是否有另一种方法来完成以下操作:

-creating a temporary nested_object for logic tests
-showing a list of nested_objects

我尝试过类似的东西:

temp_nested_object = @object.nested_object.new
temp_nested_object.delete

但没有成功。

谢谢你的时间!

更新:我正在努力做到这一点:

<% if can? :create, @project.tasks.build %>

从这里: https ://github.com/ryanb/cancan/wiki/Nested-Resources 我试图找到其他方法来实现这一点: https ://github.com/ryanb/cancan/issues/608 但似乎我需要在视图中解决它。

4

2 回答 2

2

首先你不应该create是一个临时对象。

如果您遵循之前的建议,只需执行以下操作:

@object.nested_objects.select(&:persisted?).each do |nested_objects|
  #display
end

这将从您的数据库中过滤对象(无需删除临时对象,它将在请求结束时消失)。

于 2012-05-21T19:33:44.877 回答
1

一种可能性是从集合中删除它:

# Remove last object in collection
@object.nested_objects.pop
于 2012-05-21T19:53:24.600 回答