使用范围而不是Ruby on Rails数组获取对象

时间:2015-10-15 12:22:26

标签: ruby-on-rails ruby ruby-on-rails-4

在我的控制器中,我有以下

  def index
   if !params[:place_id].nil? || !params[:place_id].empty? 
    @restaurant = GoogleSearchedLocation.registered(params[:place_id])
   else
      redirect_to customers_url
    end
  end

在我的模型中,我定义了以下范围

scope :registered , -> (place_id) { where(:place_id => place_id) }

预期输出如下,即以数组

的形式
  

< GoogleSearchedLocation id:1,place_id:“ChIJSeoh6hkEGTkRsd0e1crAbHU”,名称:“Dunkin'Donuts”,评分:4.3,   经度:零,纬度:零,范围:“GOOGLE”,created_at:   “2015-10-15 10:59:23”,updated_at:“2015-10-15 10:59:23”>

我试图将它转换为我的控制器功能中的对象,如下所示

 @restaurant1= @restaurant[0].each_slice().map{|a| GoogleSearchedLocation.new(a)}

但是它正在抛出错误

  

未定义的方法`each_slice'for   < GoogleSearchedLocation:0x00000005345cb0>

当我们都知道each_slice()函数时,任何人都可以解释错误的原因。并且建议将这种数组转换为对象的合理方法

1 个答案:

答案 0 :(得分:2)

你可以简单地使用GoogleSearchedLocation.registered(params[:place_id]).first来获取第一个找到的记录。

另请注意,对于此类简单查询,有find_by_something之类的ActiveRecord帮助程序。看看这个:

@restaurant = GoogleSearchedLocation.find_by_place_id(params[:place_id])

<强> P.S。

您可以在条件中使用params[:place_id].blank?

nil.blank?
# => true

''.blank?
# => true 

'12'.blank?
# => false