[RUBY-ON-RAILS] has_many에 레코드를 추가하는 방법 : 레일에 협회를 통해
RUBY-ON-RAILShas_many에 레코드를 추가하는 방법 : 레일에 협회를 통해
class Agents << ActiveRecord::Base
belongs_to :customer
belongs_to :house
end
class Customer << ActiveRecord::Base
has_many :agents
has_many :houses, through: :agents
end
class House << ActiveRecord::Base
has_many :agents
has_many :customers, through: :agents
end
어떻게 고객을위한 에이전트 모델에 추가하는 방법은 무엇입니까?
이 최선의 방법인가?
Customer.find(1).agents.create(customer_id: 1, house_id: 1)
콘솔에서 위의 작품 벌금 그러나, 나는 실제 응용 프로그램에서이를 달성하는 방법을 모르겠어요.
형태도 입력으로 house_id 걸리는 고객 가득 상상해보십시오. 그럼 난 내 컨트롤러에 다음을해야합니까?
def create
@customer = Customer.new(params[:customer])
@customer.agents.create(customer_id: @customer.id, house_id: params[:house_id])
@customer.save
end
테이블을 통해 : 전반적으로 나는 has_many에서 레코드를 추가하는 방법을 혼동하고있어?
해결법
-
==============================
1.난 당신이 단순히이 작업을 수행 할 수 있다고 생각합니다 :
난 당신이 단순히이 작업을 수행 할 수 있다고 생각합니다 :
@cust = Customer.new(params[:customer]) @cust.houses << House.find(params[:house_id])
아니면 고객을 위해 새로운 집을 만들 때 :
@cust = Customer.new(params[:customer]) @cust.houses.create(params[:house])
또한 IDS를 통해 추가 할 수 있습니다 :
@cust.house_ids << House.find(params[:house_id])
-
==============================
2.'가장 좋은 방법은'필요에 따라 무엇을 가장 편안하게 느낀다. 혼란의 차이에서 새로운 생성 방법과 << 연산자의 액티브의 행동을 온다.
'가장 좋은 방법은'필요에 따라 무엇을 가장 편안하게 느낀다. 혼란의 차이에서 새로운 생성 방법과 << 연산자의 액티브의 행동을 온다.
새로운 당신을 위해 연관 레코드를 추가하지 않습니다. 당신은 하우스를 구축해야하고 에이전트는 자신을 기록합니다
house = @cust.houses.new(params[:house]) house.save agent = Agent(customer_id: @cust.id, house_id: house.id) agent.save
이 두 경우 모두에서 에이전트 레코드를 생성해야하기 때문에 @ cust.houses.new 및 House.new 효과적으로 동일합니다.
미샤 언급, 당신은 또한 컬렉션에 << 연산자를 사용할 수 있습니다. 이것은 단지 당신이 집 모델을 구축해야한다, 당신을 위해 에이전트 모델을 구축 할 것입니다 :
house = House.create(params[:house]) @cust.houses << house agent = @cust.houses.find(house.id)
당신을 위해 모두 하우스와 에이전트 기록을 구축 할 것입니다 만들지 만, 당신이 당신의보기 또는 API에 그를 반환하려는 경우에는 에이전트 모델을 찾아야합니다 :
house = @cust.houses.create(params[:house]) agent = @cust.agents.where(house: house.id).first
당신이 강타 사업자 대신 집 사용을 만들 때 예외가 발생되도록하려면 최종 참고로, (예를 들어, 새로운! 만들고!).
-
==============================
3.연결을 추가하는 또 다른 방법은 외래 키 열을 사용하는 것입니다 :
연결을 추가하는 또 다른 방법은 외래 키 열을 사용하는 것입니다 :
agent = Agent.new(...) agent.house = House.find(...) agent.customer = Customer.find(...) agent.save
또는 대신 레코드의 관련 레코드의 ID를 전달 정확한 열 이름을 사용합니다.
agent.house_id = house.id agent.customer_id = customer.id
from https://stackoverflow.com/questions/7297338/how-to-add-records-to-has-many-through-association-in-rails by cc-by-sa and MIT license
'RUBY-ON-RAILS' 카테고리의 다른 글
[RUBY-ON-RAILS] RAILS_ENV 대 Rails.env (0) | 2020.02.21 |
---|---|
[RUBY-ON-RAILS] 종이 클립은 어떻게 첨부 파일을 삭제 난간? (0) | 2020.02.21 |
[RUBY-ON-RAILS] 선택 도우미 난간 - 기본 방법, 값을 선택? (0) | 2020.02.21 |
[RUBY-ON-RAILS] 협회를 통해 belongs_to (0) | 2020.02.21 |
[RUBY-ON-RAILS] turbolinks와 AngularJS와 사용 (0) | 2020.02.21 |