rails collection_select与select

collection_selectselect Rails助手:我应该使用哪一个?

两种方式我都看不出来。 这两个助手都采用一个集合,并在select标签中生成选项标签。 有一种情况下, collection_selectselect更好吗? 还是我在这里失踪的东西?

当项目列表是一个ActiveRecord对象数组时,将使用collection_selectcollection_select构build在select的顶部,所以当你需要显示一个对象集合而不是一个string数组的时候,这是一个方便的方法。

 collection_select(:post, :author_id, Author.find(:all), :id, :name) 

而关于select ,你可以使用一个哈希 。 我曾经与ENUM一起使用它。

 # In a hypothetical Fruit model enum types: { 'Banana' => 0, 'Grape' => 1, 'Mango' => 2 } # In the view f.select :type, Fruits.types.invert 

请注意,为了在选项中显示正确的值,我必须使用invert

 <select> <option value="0">Banana</option> <option value="1">Grape<option> <option value="2">Mango</option> </select> 

要在show文件中引用它,你可以使用Fruit.types ,这将返回我们以前的Hash。 这样你可以做到:

  Fruit.types[obj.type] 

最后一点:如果你喜欢enum types: { 'Banana' => :banana, ...你可以用符号代替数字enum types: { 'Banana' => :banana, ...你会得到<option value="banana">Banana</option>