ruby-on-rails - 评估 Controller 中每个 do block 内的迭代器

标签 ruby-on-rails ruby ruby-on-rails-3

我正在尝试遍历由空格分隔的数组:

diff_attr = []

%w[name hours].each do |a|
  if @old_place.a != new_place[a.to_sym]
    diff_attr << a
  end
end

我想比较两个不同对象的属性(名称和时间)。现在,我收到一个未定义的方法“a”错误。现在,a 被评估为@old_place 的方法而不是变量。

如何计算 block 内的迭代器以便进行比较:

@old.place.name != new_place[:name]

代替

@old.place.a != new_place[:a]

最佳答案

好吧,您可以像为 new_place 那样做(假设两者都是 ActiveRecord 对象):

if @old_place[a] != new_place[a]

或者,使用Object#send:

if @old_place.send(a) != new_place.send(a)

关于ruby-on-rails - 评估 Controller 中每个 do block 内的迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12867481/

相关文章:

ruby-on-rails - ruby 中的 Postgres 数据类型整数 []

ruby-on-rails - 基于不同于 ID 的东西的 Rails Route

ruby-on-rails - 更正 HAML 以将图像链接到我的 Ruby on Rails 应用程序中的另一个页面

ruby-on-rails - Will_Paginate Gem With Rails 以错误的顺序显示结果

ruby-on-rails - Rails 单元测试

ruby-on-rails - 无法在我全新的 Mac OS X Lion 10.7.3 上安装 Rails

ruby-on-rails - 名称错误 : wrong constant name

ruby-on-rails - Shoulda Matchers validate_uniqueness_of 范围到多列

mysql - 在 Rails/Heroku 上摄取巨大的 CSV : MySQL Connection Closed - SignalException: SIGTERM

ruby - 在 Ruby 中,如何从散列输出 json 并给它换行和制表符