Хорошо, поэтому я пытаюсь подключить объект Profile к объекту Session через отношения один к одному. Как я понимаю, если у меня есть отношения настроены должным образом, следующий эквивалент (пожалуйста, поправьте меня, если я ошибаюсь)Назначение Rails по взаимному отношению
@my_session << @my_profile
@my_session.profile = @my_profile
@my_session.profile_id = @my_profile.id
У меня есть следующие настройки в моей папке модели
profile.rb:
class Profile < ActiveRecord::Base
has_one :session
session.rb:
class Session < ActiveRecord::Base
# I tried this without foreign_key also, it works the same
belongs_to :profile, :foreign_key => 'profile_id'
И в моих таблицах базы данных, сеанс profile_id в нем
Doing следующие две команды в моей рельсах консоли работает отлично:
@my_session.profile = @my_profile
@my_session.profile_id = @my_profile.id
Однако, когда я пытаюсь сделать следующее:
@my_session << @my_profile
Я получаю сообщение об ошибке
NoMethodError: undefined method `<<' for #<Session:0x00000004a26198>
from /.../rubies/ruby-2.2.2/lib/ruby/gems/2.2.0/gems/activemodel-4.2.3/lib/active_model/attribute_methods.rb:433:in `method_missing'
Это какая-то проблема с тем, как я устанавливаю рельсы или что-то в этом роде? Любая помощь будет большой. Благодарю.
Хорошо, так что вы говорите, что если я сделаю связь 1-1, я не смогу использовать << и должен использовать один из двух вариантов, которые у меня есть, или create_association, или build_association? – mrfred
Да. В рубине оператор << обычно используется, чтобы перекопать что-то в коллекцию. Итак, для has_many вы можете думать о том, чтобы подталкивать другой объект в список foo.somethings (через магию), но с has_one нет коллекции объектов, это всего лишь 1, поэтому это одно задание, поэтому оператор типа коллекции не имеет смысла есть – xkickflip
Awesome. Спасибо за разъяснения! – mrfred