Rails:枚举属性的窗体帮助器



我将categoryviewable属性设置为enum

class Category < ActiveRecord::Base
  enum viewable: [:only_self, :friends, :anyone]
end

当用户编辑此属性时,我应该如何使它们在_form中可访问?类似的东西?

<%= form_for(@category) do |f| %>
  <%= f.select(:viewable) %>
<% end %>

更新------

  <%= f.select(:viewable, options_for_select([["description1", "only_self"], ["description2", "friends"], ["description3", "anyone"]])) %>
  1. 每一个的描述都很有重复性,因为我需要在任何时候展示它们,而不仅仅是形式。我应该把它们放在哪里
  2. form_for中,f.select不显示该字段的当前值。它总是第一个description1

当使用复数形式时,rails提供了完整的键/值数组,因此您可以为该数组调用Category.viewables,在options_for_select的帮助下,您将获得一个功能良好的下拉列表

<%= form_for(@category) do |f| %>
  <%= f.select(:viewable, options_for_select(Category.viewables)) %>
<% end %>

更新的答案

每一个的描述都很有重复性,因为我需要无论何时我需要展示它们,而不仅仅是在表格中。我该去哪里把它们放进去?

你可以使用I18n库,假设你的语言环境是中文(我认为),那么你可以创建/config/locales/zh.yml并添加类似于这个的东西

categories:
  viewable:
    only_self: 'some chinese text'
    friend: 'more chinese text'
    anyone: 'well you know'

然后最好创建一些返回本地化选项的帮助程序

def options_for_viewables
  { 
    t('categories.viewable.only_self') => 0,
    t('categories.viewable.friends') => 1,
    t('categories.viewable.anyone') => 2
  }
end

视图将变成这样的

<%= f.select(:viewable, options_for_viewables) %>

最新更新