Rails 3.1 - Binding HABTM van andere controller

Ik heb:

class Person < ActiveRecord::Base
  has_many :people_phones
  has_many :phones, :through => :people_phones
end

Ik heb ook:

class Request < ActiveRecord::Base
  belongs_to :person
  belongs_to :phone
end

Wanneer iemand nu belt met een verzoek, open ik het formulier "requests # new", vul ik person_id en telefoonnummer en andere details in en verzend ik deze naar "requests # create" controller # action.

In de "requests # create" kan ik doen:

@phone = Phone.find_or_create_by_phone_number(params[:phone][:phone_number])

Maar hoe kan ik Persoon met die telefoon binden vanuit deze Verzoeken-controller?

Ik bedoel, maak een record in de tabel people_phones (als deze niet bestaat)?

0

1 antwoord

User.find(person_id).phones << @phone

Ik weet niet echt hoe je app werkt, maar je ziet het wel. Als je een verzoek hebt en je wilt het "valideren", zou je dat doen

request.person.phones << request.phone

Interessante dingen om te weten, het is nogal verwant (ik zal proberen te vinden waar ik dat heb gevonden, het was lang geleden)

Stappen die nodig zijn om het object in de database op te slaan:

nieuwe

Blog.nieuwe(…).save
user.blogs << Blog.nieuwe(…)
user.blogs.nieuwe(…).save – do not use, no practical use case

Bouwen

Blog.Bouwen – not possible
user.blogs.Bouwen(…), user.save – both are required to save to DB

creëren

Blog.creëren(…)
user.blogs.creëren(…)
1
toegevoegd
<< wordt in robijn gebruikt om een ​​element aan een array toe te voegen. Het is hetzelfde principe hier, behalve dat het vervolgens het object opslaat in de database. Ik zal mijn antwoord met enkele details bewerken.
toegevoegd de auteur Robin, de bron
Hartelijk bedankt. Ik heb deze operator "<<" nog nooit gezien en ik ben er niet in geslaagd het te googlen. Wat doet het precies?
toegevoegd de auteur Petr Cezar, de bron