Tag: 别名

如何在rails中创建动态属性别名?

在类定义中,我得到了一个我想要返回的属性列表而不是数据库的值,除非这些值的存储容器是nil: class Label < ActiveRecord::Base CONFIRM_DATA = ["attr1", "attr2"] # "attr1", "attr2" is database fields CONFIRM_DATA.each do |att| alias_attribute "original_#{att}".to_sym, att.to_sym define_method att.to_sym do temp_attr_store[ att.to_sym ] || read_attribute( "original_#{att}".to_sym) end end end 如您所见,我尝试在temp_attr_store存储temp_attr_store一些临时值:它们应该出现而不是db值,并希望影响对象的关联。 上面的代码不起作用,所有attr1访问结果都是零。 谢谢!

我应该如何将alias_method_chain用于构建方法?

我正在使用Ruby on Rails 3.2.13,我想正确使用alias_method_chain :build, :option_name语句,因为我收到一个奇怪的错误。 那是, … …在我的控制器文件中我有: class Articles::CommentsController < ApplicationController def create @articles_comment = @article.comments.build(params[:comment]) … end end …在我的模型文件中我有: class Articles::Comment < ActiveRecord::Base def self.build_with_option_name … end alias_method_chain :build, :option_name end 当我运行create控制器操作时,我在日志中收到以下错误: ActionController::RoutingError (undefined method `build’ for class `Articles::Comment’): app/models/articles/comment.rb:5:in `’ 我应该如何将alias_method_chain用于build方法? 或者,也许更好,我应该以另一种方式来达到我想要做的事情(例如,我应该覆盖Articles::Comment模型中的build方法而不是使用alias_method_chain )吗? 注意I :我不知道它是否有帮助,但build方法是指一个关联( @article.comments )。 更多,我没有在Articles::Comment模型中声明build方法,因为它应该由Ruby on Rails框架本身“添加”/“附加”到类(我认为它是通过元编程实现的)。 注2 […]

当我使用find_by_sql别名时,我感到困惑

我正在使用RoR和mysql数据库。 我想将timestamp列转换为字符串,所以我有SQL: @books = Book.find_by_sql(“select id, name, date_format(borrow_date, ‘%m/%d/%Y’) borrow_date from books”) @books[0].borrow_date => ‘Sun, 03 Aug 2014 17:00:00 PDT -07:00′ 当我输出像@books [0] .borrow_date这样的borrow_date时,我得到了未格式化的字符串’Sun,2014年8月3日17:00:00 PDT -07:00’,这是不可取的。 我想要“08/03/2014” 如果我更改了不同于列名的别名,我会获得预期的数据字符串。 @books = Book.find_by_sql(“select id, name, date_format(borrow_date, ‘%m/%d/%Y’) borrow_date_other from books”) @books[0].borrow_date_other => “08/03/2014” 我不想在ruby代码中格式化日期字符串,因为我需要从oracle数据库中提取相同的数据,并且只想在使用前转换为字符串。 为什么RoR不允许相同的列名和别名? 我错过了什么吗? 先感谢您。

是否可以在Ruby中为模块创建别名?

在Python中,您可以使用“as”为模块设置别名: import mymodule as mm 但我似乎无法找到ruby的等价物。 我知道你可以include而不是require一个模块,但这会冒命名空间冲突的风险。 有没有相当于Python模块别名?

如何 – 没有inheritance – 覆盖类方法并从新方法中调用原始方法?

我找到了一个成功覆盖Time.strftime源代码,如下所示: class Time alias :old_strftime :strftime def strftime #do something old_strftime end end 麻烦的是, strftime是一个实例方法。 我需要覆盖Time.now – 一个类方法 – 在任何调用者获取我的新方法的同时,新方法仍然调用原始的.now方法。 我看过alias_method并没有成功。

alias_method_chain是alias_method的同义词吗?

如果这两种方法只是同义词,为什么人们会去编写附加字符“ _chain ”呢?

是否有可能在Ruby中识别别名方法?

通常在控制台内,我会查询一个对象 pp obj.methods.sort #or… pp (obj.methods – Object.methods).sort 在Ruby中,开发人员为方法提供别名是很常见的。 我想知道是否有一种识别别名的reflection方式,以便我可以显示别名方法,如… array.aliased_methods #=> {:collect => :map, …} 这有助于能够准确识别对象可以做多少事情。