2013-01-19 2 views
1

본질적으로, 나는 다음과 같으며 내 견적 양식의 collection_select를 사용하여 company.addresses 관계의 주소를 내 견적 모델의 has_one : 주소 필드에 할당하려고합니다. IRB에서 간단히 quote1.address = company1.addresses.first 등으로 할 수 있으며 quote_id 열은 주소 인스턴스에 기입됩니다.select 또는 collection select 사용 방법은 무엇입니까?

이제이 db 설정은 이러한 관계를 성취하는 데는 단순하고 더 좋은 방법으로 보일 수 있지만 다형성 주소는 주소 지정 가능 유형 및 필드가 견적 관계로 변경되어 문제를 발생시켜 회사 관계에서 벗어납니다 . 그들을 복제하는 방법을 알아낼 수 없었다. 하지만, 어쨌든, 아무도 내 견적 양식에 아래의 DB 설정을 사용하여 내 첫 번째 질문을 수행하는 방법에 대한 제안이 있습니까?

class Address < ActiveRecord::Base 
    belongs_to :company 
    has_many :quotes 
    attr_accessibles ... 
    ..... 
end 

class Company < ActiveRecord::Base 
    has_many :addresses 
    accepts_nested_attributes_for :addresses 
    has_many :quotes 
    attr_accessibles ... 
    .... 
end 

class Quote < ActiveRecord::Base 
    belongs_to :address 
    belongs_to :company 
    accepts_nested_attributes_for :address 
    ... attr_accessibles .... 
    .... 
end 

따옴표와 주소 사이에 조인 테이블을 권장 하시겠습니까? 회사를 유지하고 일대일로 주소를 지정하십시오.

답변

1

견적을 제출하는 다른 테이블을 만들어 주소를 지정하십시오.

새로운 발판을 만듭니다.

$ rails g scaffold NewTable quote_id:integer address_id:integer 

양식을이 코드로 바꿉니다. 나는 그것을 테스트 할 수는 없지만 상당히 정확해야한다. 원하는 곳

<%= form_for @new_table do |f| %> 
    <%= f.hidden_field(:quote_id, value: @quote.id) %> 
    <%= f.collection_select(:new_table, :address_id, Address.all, :id, :name, :prompt => true) %> 
<% end %> 

이 NewTable을 accept_nested_attributes_for 수 있습니다.

+0

그래, 나는 주소와 견적 사이에 일대일이 잘 작동하도록 따옴표 하나만 필요하기 때문에 주소와 견적 사이에 일일이 필요하므로 f.address_id, @ available_address.collect {| a | [a.line1, a.id]} 등등. 게다가 비계는 과도 할 것입니다. 제안 해 주셔서 감사합니다. – TheIrishGuy