ruby-on-rails - Ruby - 数组的未定义方法排序

标签 ruby-on-rails ruby

<分区>

我被这个难住了:

我正在尝试像这样在我的 Controller 中对数组进行排序:

Controller

@sorted = sort_by_reviews(@search, "count")

型号

def self.sort_by_reviews(array, type)
if type == "count"
  array.sort! { |x, y| y.reviews.count <=> x.reviews.count }
else
  array.sort! { |x, y| y.reviews.average.to_f <=> x.reviews.average.to_f }
end

结束

但是,我收到了这个错误:

undefined method `sort_by_reviews' for #<BuildingsController:0x007f80d89be320>

令人困惑的是,当我在 Controller 中执行此操作时:

@sorted = @search.sort! { |x, y| y.reviews.count <=> x.reviews.count }

它工作正常。

我做错了什么?

---更新

我的完整 Controller 代码:

@search = Model.search_attributes(params[:search])
@sorted = @search.sort_by_reviews "count"

我调整后的模型方法:

def sort_by_reviews(type)
if type == "count"
   self.sort! { |x, y| y.reviews.count <=> x.reviews.count }
 else
   self.sort! { |x, y| y.reviews.average.to_f <=> x.reviews.average.to_f }
 end
end

我仍然得到同样的错误:

undefined method `sort_by_reviews' for #<Array:0x007f80d423ee50>

最佳答案

您将 sort_by_reviews 定义为模型上的类方法,但将其作为 Controller 上的实例方法调用。我必须查看更多代码才能就如何进行提出建议,但可能会将模型更改为:

def sort_by_reviews(type)
  if type == "count"
    self.sort! { |x, y| y.reviews.count <=> x.reviews.count }
  else
    self.sort! { |x, y| y.reviews.average.to_f <=> x.reviews.average.to_f }
  end
end

和 Controller

@sorted = @search.sort_by_reviews "count"

关于ruby-on-rails - Ruby - 数组的未定义方法排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17036178/

相关文章:

html - 如何使用动态 Ruby on Rails 创建列?

ruby-on-rails - 具有嵌套资源的 form_for

Ruby类问题

ruby-on-rails - Rails Assets 未在Docker上加载

ruby-on-rails - 通过 rails 4 使用 jCrop 和 cloudinary 在创建图像之前进行裁剪

ruby - 奇怪的 ruby 语法

ruby - 如何在 Ruby 中修复这个多行正则表达式?

ruby - x 大于、小于还是等于值 y?

mysql - 从 postgres 迁移到 mysql 导致奇怪的错误 Mysql2::Error: MySQL server has gone away

html - 单选按钮的标签也可以选择吗?