Если вы используете ActiveAdmin, не забывайте, что в блоке регистров модели есть также allow_params:
ActiveAdmin.register Api::V1::Person do
permit_params :name, :address, :etc
end
Они должны быть установлены вместе с контроллерами:
def api_v1_person_params
params.require(:api_v1_person).permit(:name, :address, :etc)
end
В противном случае вы получите сообщение об ошибке:
ActiveModel::ForbiddenAttributesError
Попробуйте следующее:
;WITH FamilyCTE
AS
(
SELECT
*,
CAST(NULL AS VARCHAR(50)) AS FatherName,
CAST(NULL AS VARCHAR(50)) AS MotherName, 0 AS Level
FROM @FamilyTree
WHERE FatherID IS NULL
AND MotherID IS NULL
UNION ALL
SELECT
f.ID,
f.Name AS ParentName,
f.MotherID,
f.FatherID,
c.Name AS FatherName,
c2.Name AS MotherName,
Level + 1
FROM @FamilyTree AS F
INNER JOIN FamilyCTE c ON F.FatherID = c.ID
INNER JOIN @FamilyTree c2 ON f.MotherID = c2.ID
)
SELECT * FROM FamilyCTE
Если вы хотите получить точный результат, как то, что вы разместили в своем вопросе, просто игнорируете FatherName
и MotherName
и ограничить выделение в SELECT * FROM FamilyCTE
столбцами, которые вы хотите выбрать, с стартовым отцом в анкерном запросе, например, с помощью WHERE ID = 1
. Как в следующем демо:
select t1.ID, t1.MotherID,
t1.FatherID,
t1.name,
t2.Name,
Level
from table1 t1
left outer join table2 t2 on t1.FatherID =t2.FatherID