단일 양식이 있습니다.레일스 3의 다중 모델보기에서 단일 양식을 사용하려면 어떻게해야합니까?
해당 양식은 현재 모델 메시지보기에 있습니다.
때로는 연락처 (이름, 성)를 해당 메시지와 연결할 수 있기를 원합니다. 연락처 자체 모델입니다.
양식이 제출되면 Message에는 contact_id 특성이 있습니다. 그 contact_id가 연결되기를 원할뿐 아니라 새로운 Contact을 생성하기를 원합니다.
레일스 3에서는 어떻게합니까?
단일 양식이 있습니다.레일스 3의 다중 모델보기에서 단일 양식을 사용하려면 어떻게해야합니까?
해당 양식은 현재 모델 메시지보기에 있습니다.
때로는 연락처 (이름, 성)를 해당 메시지와 연결할 수 있기를 원합니다. 연락처 자체 모델입니다.
양식이 제출되면 Message에는 contact_id 특성이 있습니다. 그 contact_id가 연결되기를 원할뿐 아니라 새로운 Contact을 생성하기를 원합니다.
레일스 3에서는 어떻게합니까?
당신이 원하는 것 동일한 양식에서 작성된 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에
중첩 모델 양식.
를 살펴 줘 : http://asciicasts.com/episodes/196-nested-model-form-part-1
그것은 레일 2를 기반으로하지만, 레일과 코드가 호환되도록하기 위해 수행해야 할 많은이없는 것 3.
감사
accepts_nested_attributes_for :message
을 지정해야합니다 나는 여부를 확신하지 못했습니다 예를 들어 한 메시지와 관련된 연락처가 다른 메시지의 다른 누군가에게 제공 될 수 있기 때문에 중첩 할 수 있습니다. 그러나 has_one을 만들면 요점을 말합니다 (메시지를 전달해야한다고 가정 함). contact_id에 _id 속성) @contact를 저장하는 데 필요한 것은 내가 기대하는 것입니다 ... 그게 옳은가요? – Angela예 .. contact.rb에 has_one : message가 있으면 '@contact.message = @ message'를 주면'@contact.save'를 저장하면 연락처 객체와 메시지 객체가 저장됩니다 새로 저장된'contact' 레코드의'id'로 메시지에'contact_id'를 저장하는 것과 함께 데이터베이스에 저장합니다. 그래서, 당신은'@contact.save' 만 할 필요가 있습니다. – rubyprince