2011-03-23 2 views
1

단일 양식이 있습니다.레일스 3의 다중 모델보기에서 단일 양식을 사용하려면 어떻게해야합니까?

해당 양식은 현재 모델 메시지보기에 있습니다.

때로는 연락처 (이름, 성)를 해당 메시지와 연결할 수 있기를 원합니다. 연락처 자체 모델입니다.

양식이 제출되면 Message에는 contact_id 특성이 있습니다. 그 contact_id가 연결되기를 원할뿐 아니라 새로운 Contact을 생성하기를 원합니다.

레일스 3에서는 어떻게합니까?

답변

2

당신이 원하는 것 동일한 양식에서 작성된 Contact 및 Message 오브젝트를 모두 연관 시키십시오. 이전 질문에서 말했듯이. form_for는 독립형 값과 다른 객체 값을 모두 취할 수 있습니다.

_form.html.erb

<% form_for :message do |f| %> 
    <%= f.test_field :some_field %> 
    .. 
    .. 
    <%= text_field :contact, :first_name %> 
    <%= text_field :contact, :last_name %> 
    <%= f.submit %> 
<% end %> 

messages_controller.rb

def new 
    @message = Message.new 
    @contact = Contact.new 
end 

def create 
    @message = Message.new(params[:message]) 
    @contact = Contact.new(params[:contact]) 
    @contact.message = @message 
    if @contact.save # saves both contact and message if has_one relation is given in models 
    .. 
    else 
    ... 
    end 
end 

그러나 이것은 말했다되고, 중첩 된 형태의 모델을 사용하는 것이 좋습니다. 이를 위해서는 코드 contact을 중심으로 작성해야합니다.

contacts_controller.rb가

def new 
    @contact = Contact.new 
    @contact.message.build 
end 

def create 
    @contact = Contact.new(params[:contact]) 
    if @contact.save 
    .. 
    else 
    .. 
    end 
end 

이 들어

<% form_for :contact do |f| %> 
    <% f.fields_for :message do |p| %> 
    <%= p.text_field :some_field %> 
    ... 
    <% end %> 
    <%= f.text_field :first_name %> 
    <%= f.text_field :second_name %> 
    <%= f.submit %> 
<% end %> 

_form.html, 당신이 ... Contact.rb에

+0

감사 accepts_nested_attributes_for :message을 지정해야합니다 나는 여부를 확신하지 못했습니다 예를 들어 한 메시지와 관련된 연락처가 다른 메시지의 다른 누군가에게 제공 될 수 있기 때문에 중첩 할 수 있습니다. 그러나 has_one을 만들면 요점을 말합니다 (메시지를 전달해야한다고 가정 함). contact_id에 _id 속성) @contact를 저장하는 데 필요한 것은 내가 기대하는 것입니다 ... 그게 옳은가요? – Angela

+0

예 .. contact.rb에 has_one : message가 있으면 '@contact.message = @ message'를 주면'@contact.save'를 저장하면 연락처 객체와 메시지 객체가 저장됩니다 새로 저장된'contact' 레코드의'id'로 메시지에'contact_id'를 저장하는 것과 함께 데이터베이스에 저장합니다. 그래서, 당신은'@contact.save' 만 할 필요가 있습니다. – rubyprince

관련 문제