İki model arasında kurulan bir has_many ve belongs_to derneğim var: Project and Task.Raylar: Yeni bir çocuk kaydı oluştururken varolan bir üst öğe seçmek için form?
Yeni bir Görev oluşturmamı ve varolan bir Projeyi üst öğe olarak atamamı sağlayan bir form oluşturabilmek istiyorum. Örneğin, bu form mevcut projelerin bir listesinden seçim için bir açılanmaya sahip olabilir.
Bu uygulamada yalnızca sonlu bir dizi proje vardır, bu yüzden, bir seed.rb dosyası aracılığıyla Proje kayıtlarını oluşturdum. Yeni projeler oluşturmak için bir form yapmam gerekmiyor.
Yeni Görev formunda bir collection_select
form yardımcı etiketi kullanarak bir çözüm elde ettiğime inanıyorum. Şimdi bunun nasıl çalıştığından oldukça memnunum, ancak bu probleme başka yaklaşımlar varsa merak ediyorum.
#models/project.rb
class Project < ActiveRecord::Base
has_many :tasks, :dependent => :destroy
end
#models/task.rb
class Task < ActiveRecord::Base
belongs_to :project
end
#controllers/tasks_controller.rb
class TasksController < ApplicationController
def new
@task = Task.new
respond_to do |format|
format.html # new.html.erb
format.xml { render :xml => @task }
end
end
def create
@task = Task.new(params[:task])
respond_to do |format|
if @task.save
format.html { redirect_to(@task, :notice => 'Task was successfully created.') }
format.xml { render :xml => @task, :status => :created, :location => @task }
else
format.html { render :action => "new" }
format.xml { render :xml => @task.errors, :status => :unprocessable_entity }
end
end
end
end
#views/new.html.erb
<h1>New task</h1>
<%= form_for(@task) do |f| %>
<div class="field">
<%= f.label :name %><br />
<%= f.text_field :name %>
</div>
<div class="select">
<%= collection_select(:task, :project_id, Project.all, :id, :name) %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
<%= link_to 'Back', tasks_path %>
Teşekkürler! Nasıl kurtulacağını da anlamaya çalışıyordum: o satırdaki görev de. – Chanpory