
ojab
10.08.2016
09:35:49
ну хз, я обычно на arel костылю

s
10.08.2016
09:36:38
> 1 случай из 100
возможно. но в неделю в среднем случается несколько сотен случаев)

Антон
10.08.2016
09:36:48
:)
да не, ну нету столько проектов новых

Google

Антон
10.08.2016
09:37:21
Вообще это индикатор для меня: надо написать SQL - что-то не так с архитектурой

Pavel
10.08.2016
09:38:30
А есть пример не простейшего CRUD проекта где не надо SQL писать ?

I
10.08.2016
09:39:20
а так много где можно обойтись без sql-запросов, используя AR, Arel ил Sequel, на крайняк
исключая хранимки, триггеры

Антон
10.08.2016
09:40:46
ну у меня сейчас b2b интеграция с lucid
там нет CRUD вообще, и нет SQL
SQL пишу где данные не нормализованы
.where("settings ->> 'allow_terminated' = 'true'")
Вообще rails это не про веб :)

Pavel
10.08.2016
09:48:08

Michael
10.08.2016
11:01:43
/gisty
def show
@topics = []
@user.posts.each { |post| @topics « post.topic }
respond_with :admin, @user
end
Подскажите еще пожалуйста, как мне переделать этот код, что бы получить @topics одним красивым запросом

Google

Michael
10.08.2016
11:03:04
индекс я всетаки сделал так
def index
@users = User.joins(:posts).distinct
respond_with :admin, @users
end

ojab
10.08.2016
11:03:07
Topic.where(post: @user.posts)

Michael
10.08.2016
11:04:25
намного быстрее отрабатывает и одним запросом

ojab
10.08.2016
11:04:53
100 юзеров по тысяче постов будут строить таблицу в 100000 строк и ты по ней будешь делать distinct

Антон
10.08.2016
11:05:00
какая-то архитектурная проблема

ojab
10.08.2016
11:05:01
это, мягко говоря, нерационально
намного быстрее чем что? Чем User.where(id: Post.select(:user_id))?

Michael
10.08.2016
11:06:36
да

ojab
10.08.2016
11:07:52
гм
в базе вообще есть записи или там пара пользователей с 10 постами?

Michael
10.08.2016
11:10:10
около 1000 пользователей и у каждого по пару тысяч постов

ojab
10.08.2016
11:10:53
А что показывает User.where(id: Post.select(:user_id)).to_sql?

Michael
10.08.2016
11:10:59
вообще User, Post, Topic это как пример

ojab
10.08.2016
11:11:02
там order'а у post'ов, случаем, нет?
где-нибудь в дефолтном scope

Michael
10.08.2016
11:11:39
на самом деле это Flight, Movement, Shipment
order конечно же есть

ojab
10.08.2016
11:13:07
сделай unscope(:order), значит
потому что здесь он нафиг не нужен и, прозреваю, из-за него тормоза

Google

Michael
10.08.2016
11:14:42
а почему плохая идея использовать join ??

ojab
10.08.2016
11:16:34
потому что он условно говоря строит временную таблицу со строками user.*, post.*
и таблица будет большая
это медленно

Michael
10.08.2016
11:17:05
SELECT DISTINCT "flights".*
FROM "flights" INNER JOIN "movements" ON "movements"."flight_id" = "flights"."id" ORDER BY "flights"."departure_time" ASC

Eugene
10.08.2016
11:17:10
а чистый sql в рельсах
можно?

ojab
10.08.2016
11:17:23
можно

Michael
10.08.2016
11:17:27
ну а грузить в память то тоже не айс

ojab
10.08.2016
11:17:32
ActiveRecord::Base.connection.execute

Eugene
10.08.2016
11:17:46
понял

ojab
10.08.2016
11:17:47
что грузить в память?

Michael
10.08.2016
11:18:03
выборкой средствами руби

ojab
10.08.2016
11:18:24
тебе никто не предлагает средствами руби выбирать
Сделай котроче analyze на User.where(id: Post.select(:user_id).unscope(:order)) и на свой метод, да посмотри

Michael
10.08.2016
11:19:33
.

ojab
10.08.2016
11:19:59
гм
а откуда тут неуникальность возьмётся?
можешь тоже distinсt приделать, но он тут нафиг не нужен

Michael
10.08.2016
11:36:04
действительно join в среднем отрабатывает дольше

Google

Michael
10.08.2016
11:38:44
у Topic posts

ojab
10.08.2016
11:40:46
а, Post belongs_to :user, :topic?

Michael
10.08.2016
11:44:25
да

ojab
10.08.2016
11:54:01
тогда Topic.where(id: @user.posts.select(:topic_id)), очевидно

Michael
10.08.2016
12:20:32
Спасибо

Admin
ERROR: S client not available

Eugene
10.08.2016
13:20:54
я испугался
это вопрос?

Антон
10.08.2016
13:46:40
спасибо?

v
10.08.2016
14:49:41

ojab
10.08.2016
17:57:08
правильная архитектура не любит real life задачи

Nikolay
10.08.2016
17:59:16
ахаха

Смерть
10.08.2016
18:20:02
Чуваки, вопрос по похожей теме
Допустим есть топик, и есть его лайки. Лайки в виде сущности и пост. Чтобы не делать count по лайкам хочется хранить счетчик. Так вот его лучше хранить в сущности поста или в отдельной связаной?

ojab
10.08.2016
18:22:10
counter cache, очевидно
ибо смысла хранить отдельно, вроде бы, никакого нет

Смерть
10.08.2016
18:22:46
Ок
Спасиб

Nikolay
10.08.2016
18:25:06
кстати нащот каунтер кеша. у меня тут редиска как кеш есть, для каунтер кеша что-то еще надо?

Google

ojab
10.08.2016
18:26:32
http://guides.rubyonrails.org/association_basics.html -> 4.1.2.3 :counter_cache
так что редис тут вообще не нужен

Nikolay
10.08.2016
18:29:50
а что тогда в редисе кешится? вьюшки?

Смерть
10.08.2016
18:32:16
А как у каунтер кеша с конкурентной записью?

ojab
10.08.2016
18:34:41
http://guides.rubyonrails.org/caching_with_rails.html см. fragment cache и low-level caching

Nikolay
10.08.2016
18:36:20
нене. я про вот это:
<% @web_apps.each do |web_app| %>
<% cache web_app do %>
....
<%= link_to web_app.name... %>
<% end %>
<% end %>

ojab
10.08.2016
18:37:07
это fragment caching

Смерть
10.08.2016
18:37:24
Ага, спасибо

Nikolay
10.08.2016
18:40:29
т.е кеш фрагментов страницы..
как я понмиаю нахрен не нужен при реакто--ангулярах

v
10.08.2016
18:43:15
при реакто-ангулярах ты страницу выводишь один раз
какой-нибудь index.html
зато можешь json кэшировать

Смерть
10.08.2016
19:00:32
Можно все в варниш обернуть