Ruby on Rails访问控制器中的枚举类型

时间:2016-04-19 06:47:27

标签: ruby-on-rails ruby

以下是我的product模型:

class Product < ActiveRecord::Base

enum status: {
        disable: 0,
        enable: 1
    }

end

在我的控制器中:

class ProductsController < ApplicationController
private
        def set_product
            @product = Product.friendly.find(params[:id])
            if(@product.status != "disable"){
                @products
            } else {
                redirect_to root_path
            }
        end
end

此处@product.status返回disableenable,如何使用条件检查产品状态?上述@product.status != "disable"无效。谢谢!

2 个答案:

答案 0 :(得分:0)

当您定义了枚举时,那将创建一些直接与枚举连接的方法。

喜欢禁用?,启用?

class ProductsController < ApplicationController
private
  def set_product
    @product = Product.friendly.find(params[:id])
    if @product.disable?
      @products
    else
      redirect_to root_path
    end
  end

答案 1 :(得分:0)

我想这是因为@ porduct的状态为nil,也许您需要迁移才能将默认状态值设置为0。

class SetProductStatusToZero < ActiveRecord::Migration
  def change
    change_column :products, :status, :integer, default: 0
  end
end

它不会改变已创建的记录。要做到这一点,你必须创建一个rake任务,或者只需进入rails控制台并更新所有记录。