Как вставить объект в ActiveRecord :: Отношение в рельсах 5 - PullRequest
0 голосов
/ 22 января 2019

Я застрял в странной ситуации, я работаю над обновлением существующего приложения rails 3 до приложения rails 5.

Используя рельсы 3, у меня есть объектный отчет, который имеет много организаций

@report.organizations
#<ActiveRecord::Relation [#<Organization id: 1, name: "Org 1", description: nil, created_at: "2012-01-27", updated_at: "2019-01-15">]>
@report.organizations.count    # 1

когда я помещаю новый объект org в существующее отношение activerecord, это дает мне новое отношение activerecord, включая новый org

@report.organizations<< Organization.new
[#<Organization id: 1, name: "Org 1", description: nil, created_at: "2012-01-27", updated_at: "2019-01-15">, #<Organization id: nil, name: nil, description: nil, created_at: nil, updated_at: nil>]
# Getting count
@report.organizations.count    # 2

Используя рельсы 5, я получаю исключение

@report.organizations << Organization.new
*** NoMethodError Exception: undefined method `<<' for #<Organization::ActiveRecord_Relation:0x00007f93483e2640>

и когда мне нравится

@report.organizations.to_a << Organization.new

это дает мне

[#<Organization id: 1, name: "Org 1", description: nil, created_at: "2012-01-27", updated_at: "2019-01-15">, #<Organization id: nil, name: nil, description: nil, created_at: nil, updated_at: nil>]

но число равно 1 вместо двух

@report.organizations.count    # 1

Надеюсь, моя проблема вам ясна, пожалуйста, помогите мне, как решить эту проблему. Спасибо

Ответы [ 3 ]

0 голосов
/ 22 января 2019

Когда вы используете новый определенно, вам нужно сохранить эту переменную. Например,

organization=Organization.new
organization.name = "organization 1"
organization.description= "Something description"
organization.save #save the array obj
Organization.count #1

, иначе используйте метод create для создания записи. Вдруг оба одинаковы

Organization.create(name:"org2",description: "something")
Organization.count #2
0 голосов
/ 22 января 2019

Это работает для меня:

a=[]
a << @report.organizations
a.count # => 1
a << Organization.new
a.count # => 2
0 голосов
/ 22 января 2019

Согласно , руководство должно работать. Если это не так, попробуйте использовать create:

 @report.organizations.create
...