
Иван
27.09.2016
06:15:42
вроде ничего так
но так как я сам учусь, то не могу с уверенность сказать что это хороший курс и что он тебе принесет пользы

Anon
27.09.2016
06:20:43
спасибо, посмотрю

Amir
27.09.2016
06:37:04
@messages = Message.joins(:receiver => :department).where(User.table_name => { DepartmentID: ids }).joins(:journal, :initiator)

Google

Amir
27.09.2016
06:37:09
вот так работает
но видите я там сразу указал имя таблицы а не алиас
как получить доступ к алисам соединенных таблиц?
или задать свое имя алиаса
Message.joins(:receiver)
Как здесь сделать свой алиас, потом использовать этот алиас в условии where
Message.joins(:receiver).where(recievers: {условие})
канает если ваша таблица случайным образом называется receivers

Adamtsov
27.09.2016
06:41:57
не случайным образом, когда делаться Model.joins(:foo), то foo - это названии ассоциации, а в where подставляется название таблицы

Amir
27.09.2016
06:48:31
вооот
а если этих таблиц в запросе несколько, в моем случае два
два джойна на одну и ту же таблицу
притом имя таблицы задается в модели
self.table_name = "TableI1"
self.table_name = "Table2"
и соотвественно в активрекорд
выходха вроде
where(:users => {условие}) не канает
т.к. в SQL запросе ставит условие
users.field1 = 1
а не реальное называние таблицы, или алиаса
это просто случайное совпадение в рельцах когда все работает, когда БД само рельцы генерируют

Google

Adamtsov
27.09.2016
06:51:51
так если название таблицы указывается table1, то в where надо и писать table1
или так не работает?

Amir
27.09.2016
06:52:22
не могу так, т.к. рельцы там по своему назвали, и дали алиас
после LEFT JONI table1 table_table1 on table_table1.id=foo.id1
после LEFT JONI table1 table_table2 on table_table2.id=foo.id2
where table1 —--> и тут как скл поймет какая таблица
оказывается когда пишем
where(table1: {:qwe: 1})
просто совпадение что в базе таблица называется table1
хотя это я все затеял на рельцах 4
может на 5 нормально
а все изза того что не нашел подходящего адаптера на MSSQL 2008 R2
на рельцах 5, толлько 2012 поддерживает

Adamtsov
27.09.2016
07:00:40
ну тут я уже хз, я такое сейчас не делал
как вариант на sql писать

Amir
27.09.2016
07:01:02
tiny_tds?

Adamtsov
27.09.2016
07:01:21
?

Dima
27.09.2016
07:09:09
Зачем используется астерикс:
inventory =['apples', 17, 'oranges', 11, 'pears', 22]
Hash[*inventory]
?

Иван
27.09.2016
07:16:03
разворачивает массив в список аргументов
которые метод принимает

Amir
27.09.2016
07:17:16
@messages = Message.joins("INNER JOIN #{User.table_name} as ttt on ttt.ID = #{Message.table_name}.ReceiverID LEFT JOIN #{Department.table_name} ddd on ddd.ID=ttt.D
epartmentID").where(:ttt => { DepartmentID: ids }).joins(:journal, :initiator)
так делать чтоли каждый раз?
работает

Dima
27.09.2016
07:20:09
Нижнее подчеркивание в данной примере:
_, *unquoted, _ = '"quoted"'.split(//)
- это какая-то конструкция языка?

Google

I
27.09.2016
07:42:15
да нет
это то, на что тебе похер
в python и js так же делать можно

Dima
27.09.2016
07:46:37
да нет
просто переменная получается?

I
27.09.2016
07:48:18
ну вообще да, но это общепринятое соглашение для того, чтобы описывать параметр, который не используется

Dima
27.09.2016
07:48:45

Amir
27.09.2016
08:08:24
@messages = Message.joins(:journal, :initiator)
@messages = @messages.joins(:receiver => :department )
@messages = @messages.where("receivers_#{Message.table_name}" => { DepartmentID: ids } )
@messages = @messages.where(CreateDateTime: date_start..date_end)
может поправите?

Igor
27.09.2016
08:09:17
Нижнее подчеркивание - это нотация симольных языков (в первую очередь LISP), там очень часто возникает ситуация, когда вы не можете не указывать переменную, а далее она не используется. От туда это обозначение и пошло

I
27.09.2016
08:09:32
ох
таблица и camelCase и snakeCase, прекрасно
а почему где-то :receiver => :department, а где-то CreateDateTime:

Amir
27.09.2016
08:11:35
потомучто база не рельцовая

I
27.09.2016
08:12:07
а что генерируется @messages = @messages.where("receivers_#{Message.table_name}" => { DepartmentID: ids } ) ?

Amir
27.09.2016
08:12:14
.where("receivers_#{Message.table_name}"
мне пришлось так указать условие к присоединяемой таблице, лучшего способа не смог придумать

I
27.09.2016
08:13:05
а у Message нет никакого relation’a типа receivers?
ну, это же было бы круто

Amir
27.09.2016
08:13:12
есть

I
27.09.2016
08:13:26
и почему бы тогда не его брать?

Amir
27.09.2016
08:13:38
как?
он ставит там фигню в SQL
where("receivers_#{Message.table_name}" => { DepartmentID: ids }
только так работает

Google

Amir
27.09.2016
08:14:30
там он генерит алиас, я его угадал и прописал вручную вот так

I
27.09.2016
08:14:42
ну не зная структуры базы пальцем в небо тыкать точно никто не станет

Amir
27.09.2016
08:15:49
у Message есть два соединенных таблиц, reciever, initiator
вот их надо соединить, потом надо условие к первому таблице надо сделать
с 1 соединением не было бы проблем
хотя хз, всеравно проблема есть, т.к. имя таблицы не совсем как думает Рельцы
а указывается в модели self.table_name = "MYTABLEUSER"
MYTABLEUSER
когда соединяешь вторую таблицу рельцы генерит алиас к этой таблице, и вот проблема, в условии WHERE нельзя простым способом указать условие через имя таблицы
да вообще ни как указать нельзя как сейчас понимаю

I
27.09.2016
08:19:03
да можно, не придумывайте

Amir
27.09.2016
08:19:13
только как задумали авторы рельцы
where(simpename: {f1: 11})
sql получается where simplename.f1 = 111

Admin
ERROR: S client not available

Amir
27.09.2016
08:19:52
он не умеет ставить алиас к условии
только то что указал в символе
Foo.joins(:foo2).where(foo2s: {f1: 111} )
только так умеет
символ foo2s будет принимать как имя таблицы
и это если ты знаешь имя таблицы, потом подключаешь ту же таблицу вторым
рельцы генерит алиас, и тут уже этот фокус не проходит

I
27.09.2016
08:23:20
@messages = @messages.where("receivers_#{Message.table_name}" => { DepartmentID: ids } )
вообще тут хорошо бы зашел scope, кстати

Amir
27.09.2016
08:24:44
нет, подразумевается еще что будет много фильтров
вот такими соединениями
хотел сделать фо феншую, по рубовски, рельцовски
но видать придется как всегда по хардкору на чистом SQL и PHP боже упаси

I
27.09.2016
08:28:12
ну, удачи, конечно, но я уверен, что это можно сделать по-человечески

Google

Amir
27.09.2016
08:28:35
странно что нельзя вмешивать в запросе и указать свое имя алиаса таблицы
где нибудь как нибудь так:
Foo.joins(:moo as: "MYMOO").where(MYMOO: { fff: 111} )
было бы не плохо

I
27.09.2016
08:28:48
а зачем?
а так никто не мешает вкрячить в joins SQL-statement и получить нужное
Foo.joins(«LEFT JOIN moo AS MYMOO»)
но цели все равно не понимаю

Amir
27.09.2016
08:31:04
ага, нечто подобное сделал, но выглядит ужасно
на чисто SQL будет красивее и понятнее
1 class Message < ActiveRecord::Base
2 self.table_name = "ViewLDMail"
3 self.primary_key = "ID"
4 belongs_to :journal, foreign_key: "JournalID"
5 belongs_to :initiator, foreign_key: "InitiatorID", class_name: "User"
6 belongs_to :receiver, foreign_key: "ReceiverID", class_name: "User"
7 end
я просто хотел сделать на чистом AR
и красиво вывести любую инфу таким образом
<td><%= msg.receiver.Name %></td>
<td><%= msg.receiver.department.Name %></td>
<td><%= msg.journal.Name %></td>
разве не в этом суть ООП ? :)

I
27.09.2016
08:45:19
а у User есть DepartmentID, да?

Amir
27.09.2016
08:52:21
ага

I
27.09.2016
08:54:17
а что за receivers_ViewLDMail?
что в ней валяется?

kolas
27.09.2016
08:57:12
Сказали же н+1 это фича
Не оптимизируй?

Alex
27.09.2016
12:55:39
Накладывать тесты на уже существующий проект это жесть конечно.

Плюшка
27.09.2016
12:56:03

Roman
27.09.2016
13:57:50
на хироку можно файлы загружать?
есть лимит по объему ?

Dima
27.09.2016
14:18:24
Есть люди которые качественно знают английский язык?
1) Instead, modules get mixed in to classes, using the include method.
2) Instead, it’s defined in a module that the class mixes in.
3) but also those of (in one case) a superclass or (in the other case) a mixed-in module.
Как на русский язык гладго переводить вот эти вот mixed in to, module that tha class mixes in и т.д. Как вообще определяется в нюансках велкого и могучего языка кто куда что подмешал.
Именно лингвестический вопрос.