我正在尝试将我的网站前端的一串数字从英制转换为公制,具体取决于用户是否已将其measurement_units设置为“metric”或“imperial”
我可以@myWeight*.45
来转换数字,但我想要做的就是编写一个这样的辅助方法
def is_imperial?
if User.measurement_units == 'metric'
*0.453592
elsif User.measurement_units == 'imperial'
*1
end
end
然后能够这样做:@myWeight*.is_imperial?
我只是不确定如何将*value
分配给方法is_imperial?
感谢您的帮助!
编辑:
@myWeight是通过添加多个数字计算的浮点数。
如果用户将度量标准作为用户模型上measurement_units
字段中的值,我只是想找到一种优雅的方式将网站上显示的任何数字转换为指标。
我假设我需要在application_helper.rb中创建一个辅助方法。这不正确吗?
答案 0 :(得分:2)
我认为你的意思是这样的:
class User
def imperial
f_multiplier = 0.0
f_multiplier = !!(self.measurement_units == 'metric') ? 0.453592 : 1
imperial = self.weight * f_multiplier
end
end
puts @myWeight.imperial
答案 1 :(得分:1)
如果您希望measurement_units
方法基于用户是动态的,那么我认为您需要将其设为实例方法。
修改is_imperial?
方法以返回正确的数字:
def is_imperial?
if measurement_units == 'metric'
0.453592
elsif measurement_units == 'imperial'
1
end
end
然后你可以用这样的方法调用方法:
@myWeight.send(:*, is_imperial?)
如果@myWeight代表User
对象,您可能需要将其更改为:
@myWeight.weight.send(:*, is_imperial?)
以?结尾的方法?在Ruby中应该返回true或false,因此你应该将方法重命名为weight_conversion_factor。
答案 2 :(得分:0)
假设@myWeight
是Float值,您似乎正在寻找如何修补补丁。签入rails控制台,@myWeight.class.name
返回Float。
对于Rails中的猴子修补,
创建config/initializers/extensions
目录。这是您存储未来猴子修补方法的地方。
创建名为floats.rb
的文件。
添加以下代码。
class Float
def is_imperial?
if User.measurement_units == 'metric'
self*0.453592
elsif User.measurement_units == 'imperial'
self*1
end
end
end
确保重新启动Rails服务器以重新初始化。