有没有更简单的方法来查找记录并在 Rails 3 中返回其属性之一



我发现自己一遍又一遍地编写以下代码:

MyModel.find(my_id).my_field

我想知道是否有更简单的方法来写这个?

如果你问是否有更简洁的写作方式......不确定标准查找器是否有。 你所拥有的很小。只是为了好玩,我为你写了这个:)

class ActiveRecord::Base
  def self.method_missing_with_retrieve_just_a_field(method_called, *args, &block)
    if(method_called.to_s=~/get_/)
      self.find(args[0]).send(method_called.to_s.gsub("get_", ""))
    else
      method_missing_without_retrieve_just_a_field(method_called, *args, &block)
    end
  end
  class << self
    alias_method_chain :method_missing, :retrieve_just_a_field
  end
end

如果您将其作为 crazy_finder.rb 之类的文件放在配置/初始值设定项中,则可以说:

MyModel.get_my_field(my_id)

它并没有为你节省太多,但只是认为写起来会很有趣。

除了 Jake 针对每个模型和每个属性的全局解决方案之外,您还可以轻松定义显式的单个访问器:

class MyModel
  def self.my_field(id)
    find(id).my_field
  end
end

或一组字段:

class MyModel
  class << self
    [:my_field, :other_field].each do |field|
      define_method field do |id|
        find(id).send(field)
      end
    end
  end
end

您是一遍又一遍地为同一资源或对许多不同的资源执行此操作?如果你能给我们更好的例子来说明你想做的事情,那真的会很有帮助,如果你做了很多次,给我们很多次你正在做的事情的例子会有所帮助。

如果仅对一个资源执行此操作以获取不同的值:

如果你一遍又一遍地在同一个动作中这样做,你就做错了。首先将结果存储在如下所示的变量中:

@mymodel = MyModel.find(id)

然后你可以使用

@mymodel.my_field

然后再次(无需再次找到它)

@mymodel.不同字段

或者,如果要为集合执行此操作,可以执行以下操作:

@mymodels = MyModel.find([my_first_id, my_second_id, my_third_id])

等等,你身边更好的例子会帮助你!

相关内容

  • 没有找到相关文章

最新更新