轨道上的红宝石 - 地理编码器 Gem:如何在两个不同的模型之间使用



我正在使用地理编码器和 Will 分页宝石,根据与用户位置的距离和孩子妈妈的地址对结果进行排序。我的模型是这样的:

class User
 has_many :kids
 geocoded_by :address
end
class Kid
  belongs_to :mom
  belongs_to :dad
end
class Mom
  has_many :kids
  has_many :dads, through: :kids
  geocoded_by :address
end
class Dad
  has_many :kids
  has_many :moms, through: :kids
end

现在,我正在尝试使用我将使用Users.address的正确范围并将其与Kids.moms.addresses进行比较

def show
 @dad = Dad.find(params[:id])
 @user_location = current_user.address
 @kids = @dad.kids.near(@user_location, 100).paginate(page: params[:page], per_page: 25).order(created_at: :desc)
end

这给了我错误:

NoMethodError - undefined method `address' for nil:NilClass:
  app/controllers/dads_controller.rb:14:in `show'
  actionpack (4.0.2) lib/action_controller/metal/implicit_render.rb:4:in `send_action'
  actionpack (4.0.2) lib/abstract_controller/base.rb:189:in `process_action'
  actionpack (4.0.2) lib/action_controller/metal/rendering.rb:10:in `process_action'
.......

有什么建议吗?


更新

到目前为止,我已经做到了:

class ApplicationController
  before_filter :set_user_location
  private
  def set_user_location
    if signed_in?
      @user_location = current_user.address
    end
  end
end
class DadsController
def show
  @dad = Dad.find(params[:id])
  @kids = @dad.kids.joins(:mom).merge(Mom.near(@user_location, 100)).order(name: :asc, created_at: :desc).paginate(page: params[:page], per_page: 25)
end

上面的代码使当前用户地址正常工作(使用 Devise),但现在我收到错误:

ActiveModel::MissingAttributeError
missing attribute: birthday

对于页面上的所有儿童属性。

<% @kids.each do |kid| %>
   <%= kid.birthday %>
   <%= kid.name %>
   <% if kid.upkeep.present? %>
     <%= kid.upkeep %>
     <%= kid.upkeep_size %> 
   <% end %>      
   <%= kid.age %>
   <%= kid.favorite_color %>
<% end %>

我想这是因为它认为妈妈和孩子有相同的属性。有什么想法吗?

以下是使用地理编码器执行此操作的方法:

def show
  @dad = Dad.find(params[:id])
    near = Mom.near(@user_location, 100, :select => "kids.*")
  @kids = @dad.kids.joins(:mom).merge(near).order(name: :asc, created_at: :desc).page(params[:page])
end

:select选项是我需要添加的。

问题是Kid本身没有进行地理编码,因此无法使用near范围。

像这样的事情应该让你接近:

@dad.kids.joins(:mom).merge(Mom.near("San Francisco, CA, US")).paginate(...).order(...)

文档

编辑

根据您更新的问题,看起来current_user nil.一旦你解决了这个问题并将其与上面的查询结合起来,你应该很好。

相关内容

  • 没有找到相关文章

最新更新