多列的枚举值相同

时间:2015-06-22 13:35:19

标签: ruby-on-rails ruby enums

我需要做这样的事情:

class PlanetEdge < ActiveRecord::Base
  enum :first_planet [ :earth, :mars, :jupiter]
  enum :second_planet [ :earth, :mars, :jupiter]
end

我的表是一个边的表,但每个顶点都是一个整数。

然而,看起来铁路上不可能出现这种情况。什么可能是制作字符串列的替代方法?

2 个答案:

答案 0 :(得分:8)

如果您按http://edgeapi.rubyonrails.org/classes/ActiveRecord/Enum.html

运行rails 5.0或更高版本

当您需要定义具有相同值的多个枚举时,可以使用:_prefix或:_suffix选项。如果传递的值为true,则方法的前缀/后缀为枚举的名称。也可以提供自定义值:

class Conversation < ActiveRecord::Base
    enum status: [:active, :archived], _suffix: true
    enum comments_status: [:active, :inactive], _prefix: :comments
end

通过上面的例子,bang和谓词方法以及相关的范围现在都是相应的前缀和/或后缀:

conversation.active_status!
conversation.archived_status? # => false

conversation.comments_inactive!
conversation.comments_active? # => false

答案 1 :(得分:2)

也许它将提取行星作为另一种模式?

$scope.showStuff = function () {
    $scope.initInputFields();
    $scope.startFade = false;
    $timeout(function(){
        $scope.hidden = false;
    }, 700);

};

$scope.initInputFields = function() {
    $scope.inputFileds = [{
            "label": "input1",
            "value": ""
        },{
            "label": "input2",
            "value": ""
        },{
            "label": "input3",
            "value": ""
        },{
            "label": "input4",
            "value": ""
        }];        
};

$scope.initInputFields();

您可以使用class Planet < ActiveRecord::Base enum type: %w(earth mars jupiter) end class PlanetEdge < ActiveRecord::Base belongs_to :first_planet, class_name: 'Planet' belongs_to :second_planet, class_name: 'Planet' end

创建PlanetEdge
accepts_nested_attributes_for