this question上的答案为我提供了一个很好的路线图,说明如何使用关联中的集合中的数据生成选择标记。
这很好用,一切都很顺利。
我现在遇到的问题是,如何处理空集合?
使用常规:type => :input
,我只需指定:nil => "Some nil message here"
。
但这似乎不适用于集合,更糟糕的是,当集合中没有任何内容时,它似乎显示了一些整数(即1
和2
)。我假设那些是以前在集合中显示的对象的ID,但是由于显而易见的原因没有多大意义。
关于如何用这个宝石处理空集合的任何想法?
感谢。
修改1:
另一种方法是将原始的best_in_place
帮助器标记放在if
语句中,以便在集合不为零时使用。但是,当用户空白时,用户如何编辑它?也许可能无法处理这个问题,因为它涉及在集合中创建一个新记录。
答案 0 :(得分:2)
我对select标签中的空选项使用“解决方法”,它可以帮助您:
:type => :select, :collection => @my_colletion || [[I18n.t('common.none'), -1]]
当@my_colletion
为nil时,它会显示一个名为'None'的选项,其id = -1(在后端处理并不坏)。
这部分代码假设@my_collection
是一个数组数组,如[ [key, value], [key, value], ... ]
或者没有。
但是,如果您希望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(tests等)。使用-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.
我希望它有所帮助:)。