ruby-on-rails - 在 Ruby on Rails 中重构一些模型方法

标签 ruby-on-rails

我的模型中有一些方法,用于访问 View 中存储的文本哈希:

class CarSpec < ActiveRecord::Base

    @@fuel_type_select_data = Hash[(1..5).to_a.zip(['Petrol', 'Diesel', 'Gas/petrol', 'Hybrid', 'Electric'])]
    @@mileage_type_select_data = Hash[(1..2).to_a.zip(['km', 'miles'])]
    @@transmission_select_data = Hash[(1..3).to_a.zip(['Manual', 'Automatic', 'Tiptronic'])]
    @@wheel_drive_data = Hash[(1..3).to_a.zip(['Front', 'Rear', 'All'])]
    @@color_data = Hash[(1..8).to_a.zip(['black', 'white', 'beige', 
              'blue', 'yellow', 'green', 'red', 'silver'])]

    def text_for_fuel_type
       @@fuel_type_select_data[fuel_type] 
    end

    def text_for_mileage_type
       @@mileage_type_select_data[mileage_type] 
    end

    def text_for_transmission
       @@transmission_select_data[transmission] 
    end

    def text_for_wheel_drive
       @@wheel_drive_data[wheel_drive] 
    end

    def text_for_color
       @@color_data[color]
    end

    def text_for_interior_color
       @@color_data[interior_color] 
    end

目前,我需要为每个字段编写一个新方法。如何重构这些方法,以便不需要为每个字段编写新方法?请包括如何在 View 中调用新方法。

最佳答案

在您的情况下,使用常量而不是类变量会更好。

一个例子:

class CarSpec < ActiveRecord::Base
  WHEEL_DRIVE_DATA = {'Front' => 1}

  # remaining class code
end

查看示例代码:

<%= CarSpec::WHEEL_DRIVE_DATA['Front'] %>

关于ruby-on-rails - 在 Ruby on Rails 中重构一些模型方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27800347/

相关文章:

ruby-on-rails - Rails 3 - 这个 SQL 安全吗?

ruby-on-rails - rails 5 : ActiveRecord collection index_by

ruby-on-rails - 登录后重定向到原始目的地

ruby-on-rails - 在 HAML 中为背景图像 : -> Object in Rails 插入 SASS

ruby-on-rails - 如何正确诊断 500 错误(Rails、Passenger、Nginx、Postgres)

ruby-on-rails - 为什么 Travis 在部署到 Heroku 时无法连接使用 Redis cache_store?

mysql - 如何在 Rails 中集成 "Did you mean"功能?

ruby-on-rails - Ruby on Rails,如何返回为该时间段创建对象的天数

ruby-on-rails - 测试method_defined? ActiveRecord 类在实例化之前不起作用

Javascript 更改随机背景图像问题