1

这个问题的答案为我提供了一个很好的路线图,说明如何使用关联集合中的数据生成选择标签。

这很好用,一切都很好。

我现在遇到的问题是,如何处理空集合?

使用常规:type => :input,我可以指定:nil => "Some nil message here"

但这似乎不适用于集合,更糟糕的是,当集合中没有任何内容时,它似乎正在显示一些整数(即12)。我假设这些是集合中先前显示的对象的 ID,但出于明显的原因,这没有多大意义。

关于如何使用此宝石处理空集合的任何想法?

谢谢。

编辑1:

一种替代方法是将我原来best_in_place的辅助标签放在一个if声明中,用于当集合不为零时。但是,当它为空白时,用户如何编辑它?也许没有办法处理这个问题,因为这将涉及在集合中创建一个新记录。

4

1 回答 1

2

我对选择标签中的空选项使用“解决方法”,它可以帮助您:

:type => :select, :collection => @my_colletion || [[I18n.t('common.none'), -1]]

@my_colletion为 nil 时,它显示一个名为 'None' 且 id = -1 的选项(这在后端处理起来还不错)。

这部分代码假设@my_collection是一个数组数组,如[ [key, value], [key, value], ... ]OR nil。

虽然,如果您希望您的MyModel.all收藏符合 best_in_place 的条件,您可以使用以下内容:

@my_collection = MyModel.all.map{ |object| [object.name, object.value] } 
# => this returns an array like [ [key, value], [key, value], ... ]
# => returns an empty array (NOT nil) if there is no entry in the DB

关于 -1 id: 将 -1 id 用作“none”很容易,因为您不需要显式处理值 nil(测试等)。使用 -1 id,您可以使用以下内容:

MyModel.where(id: params[:id]).first # => Returns the first object that has the params[:id]
# if params[:id] is -1, it will return nil and not raise an error.

我希望它有帮助:)

于 2012-11-30T17:29:27.197 回答