Size: a a a

2021 January 20

Э

Эдем in RubyRush
Ну понятнее не стало 🤷‍♂️

Если речь о том, чтоб скипнулось, то вот так, например

result = array.reduce(0) do |acc, item|
 acc += item if item > 0
 acc
end


result будет сумма положительных чисел массива
источник
2021 January 21

E

Evgeniy in RubyRush
Ок. Спасибо.
источник

E

Evgeniy in RubyRush
Хотел разобраться именно с работой с return в руби блоках.
источник

1

111a in RubyRush
Evgeniy
Хотел разобраться именно с работой с return в руби блоках.
По return выйдет из метода где был вызван блок.
источник

1

111a in RubyRush
источник

KR

Kill Real in RubyRush
Всем привет))
Кто нибудь работал с гемом 'activerecord-postgis-adapter'?

У меня есть модель RoutePoint с колонками longitude и latitude и User с колонкой work_area, type=>"st_polygon"
Хочу написать скоуп, чтобы найти все route_points которые содержаться в work_area (т.е. polygon-а)
(
 create_table "users", force: :cascade do |t|
   t.geometry "work_area", limit: {:srid=>0, :type=>"st_polygon"}
 end

 create_table "route_points", force: :cascade do |t|
   t.string "address_title"
   t.float "longitude"
   t.float "latitude"
   t.bigint "order_id", null: false
   t.datetime "created_at", precision: 6, null: false
   t.datetime "updated_at", precision: 6, null: false
   t.index ["order_id"], name: "index_route_points_on_order_id"
 end
)


#<RoutePoint:0x00007ff888f8bbe0
id: 30,
address_title: "Магнитогорск, Челябинская обл., Россия",
longitude: 59.0623067,
latitude: 53.3927214,
order_id: 38,
created_at: Wed, 13 Jan 2021 12:23:55 UTC +00:00,
updated_at: Wed, 13 Jan 2021 12:23:55 UTC +00:00>

User.last.work_area
User Load (171.2ms)  SELECT "users".* FROM "users" ORDER BY "users"."id" DESC LIMIT $1  [["LIMIT", 1]]
=> #<RGeo::Geographic::SphericalPolygonImpl:0x4ba0 "POLYGON ((-84.39731626974567 33.75570358345219, -84.33139830099567 33.86524376001825, -84.25243406759724 33.770545357734925, -84.39731626974567 33.75570358345219))">
источник

KR

Kill Real in RubyRush
Не могу понять как написать такой запрос, может кто то сталкивался и знает?
источник

E

Evgeniy in RubyRush
Что за книжка? Спс!
источник

1

111a in RubyRush
Evgeniy
Что за книжка? Спс!
head first ruby, все основы
источник

L

Lem in RubyRush
Kill Real
Не могу понять как написать такой запрос, может кто то сталкивался и знает?
обязательно полигон нужен? квадрат не пойдет?
источник

v

veerl in RubyRush
Помогите, не могу понять почему не выводится b.
источник

ch

central hardware in RubyRush
veerl
Помогите, не могу понять почему не выводится b.
а с какого b должна выводится?
источник

v

veerl in RubyRush
central hardware
а с какого b должна выводится?
Так, складывать он начал. Но вывод перед рекурсии идет, получается после неё метод ничего не видит ?
источник

ch

central hardware in RubyRush
veerl
Так, складывать он начал. Но вывод перед рекурсии идет, получается после неё метод ничего не видит ?
у вас в методе нету выводов вообще, у вас выводится только результат рекурсивной функции
источник

K

Kirill Ilyin in RubyRush
veerl
Так, складывать он начал. Но вывод перед рекурсии идет, получается после неё метод ничего не видит ?
Вы знаете, как работает метод gets?
источник

NZ

Nick Zhur in RubyRush
veerl
Помогите, не могу понять почему не выводится b.
Почитайте про splat operator, может решение переделаете...
источник

Э

Эдем in RubyRush
veerl
Так, складывать он начал. Но вывод перед рекурсии идет, получается после неё метод ничего не видит ?
Метод сам себя вызывает и никогда не выйдет из этой рекурсии
источник

v

veerl in RubyRush
Эдем
Метод сам себя вызывает и никогда не выйдет из этой рекурсии
Уже понял. Решение гиблое, решил другим способом.
Всем спасибо, кто ответил.
источник

KR

Kill Real in RubyRush
Lem
обязательно полигон нужен? квадрат не пойдет?
да пока решил полигон использовать удобная френдли конструкция, в общем за ночь разобрался. нужно обязательно геометрическим данным для postgis в запросах указывать SRID ( я так понимаю это параметр отправной точки для расчетов координат). Документация конечно для гема RGeo и вытекающий ну мягко говоря "не очень".

Чтобы спасти некоторым жизнь, и уделить больше времени на близких вам людей и впечатления в жизни, вот запрос:

class RoutePoint < ApplicationRecord
 belongs_to :order

 def self.g_within_polygon
   # polygon = Geo.polygon(points)
   polygon = User.last.work_area
   self.where("ST_Contains(:polygon, ST_SetSRID(ST_MakePoint(longitude, latitude), #{Geo::SRID}))", polygon: Geo.to_wkt(polygon))
 end

 # points = [
 #   [-84.39731626974567, 33.75570358345219],
 #   [-84.33139830099567, 33.86524376001825],
 #   [-84.25243406759724, 33.770545357734925],
 #   [-84.39731626974567, 33.75570358345219]
 # ]

 # coords = Geo.pairs_to_points(points)

 # User.last.update(work_area: Geo.polygon(coords))
end


Geo это класс, который я взял в статье у человека,  ссылка:
https://pganalyze.com/blog/postgis-rails-geocoder#installing-postgis

Кстати засунул я этот класс в папку config/initializers, может вы как думаете стоит в другое место вынести его?

Из postgis использую функцию ST_Contains для ограничения области поиска, но также есть функция ST_Covers, советую изучить и ту и ту.

Вот результат выполнения в консоли:

RoutePoint.g_within_polygon.first
 User Load (0.3ms)  SELECT "users".* FROM "users" ORDER BY "users"."id" DESC LIMIT $1  [["LIMIT", 1]]
 RoutePoint Load (0.6ms)  SELECT "route_points".* FROM "route_points" WHERE (ST_Contains('srid=4326;POLYGON ((-84.39731626974567 33.75570358345219, -84.33139830099567 33.86524376001825, -84.25243406759724 33.770545357734925, -84.39731626974567 33.75570358345219))', ST_SetSRID(ST_MakePoint(longitude, latitude), 4326))) ORDER BY "route_points"."id" ASC LIMIT $1  [["LIMIT", 1]]
=> #<RoutePoint:0x00007ff8950f1d20
id: 31,
address_title: "1798 Haygood Dr NE, Atlanta, GA 30307, США",
longitude: -84.3167664,
latitude: 33.7936176,
order_id: 39,
created_at: Wed, 20 Jan 2021 23:55:38 UTC +00:00,
updated_at: Wed, 20 Jan 2021 23:55:38 UTC +00:00>
источник

O

Op3nyourmind in RubyRush
Не совсем понял разницу между else и elsif , точнее я понял что разницы нет никакой?
источник