簡単なものが欠けていると確信していますが、Rails の正しい用語を認識していないため、探しているものが見つかりません....
Project
モデル has_many 、Task
およびTask
belongs_to Project
.
私のroutes.rb
持っている
resources :projects
resources :tasks
私は問題なく作成/編集/変更Projects
でき、編集もできTasks
ます...しかし、新しい を作成する方法がわかりません。そうするときTask
に正しいを割り当てます。Project
私のProject
ページ (例: /projects/2) には、/task/new に移動する [Add Task] リンクがあるため、接続が失われています。ネストされたリソースを作成したくありません。Tasks
作成されると、ID によって一意に識別され、将来的には他のモデルも has_many になるためです。
ここで簡単な修正はありますか?
編集さて、私はこれを解決することができました....それは醜く、恐ろしいものであり、なぜそうしなければならないのかわかりませんが、うまくいきます。
私のルート:
resources :projects do
resources :tasks, :only => [:new]
end
resources :tasks, :except => [:new]
私のタスクコントローラー:
def new
@project = Project.find(params[:project_id])
@task = @project.tasks.build
end
# Process the form for creating a new task.
def create
@project = Project.find(params[:task][:project_id])
@task = @project.tasks.build(params[:task])
if @task.save
flash[:success] = 'Task created.'
redirect_to project_path(@project)
else
render 'new'
end
end
そして私のタスクフォーム:
<%= semantic_form_for @task do |f| %>
<%= render 'shared/form_message', :object => f.object %>
<%= f.inputs do %>
<%= f.input :name %>
<%= f.input :project %>
<% end %>
<ul class="formActions">
<li class="list"><%= link_to 'Back to list', project_path(@task.project) %></li>
<li><%= f.submit "Save" %></li>
</ul>
<% end %>
プロジェクト ボックスをフォームに配置する必要はありませんでした。なぜそうしなければならないのか、ネストされたルートから :create を削除する必要があるのかどうかはまだわかりません。また、そのような一般的なタスクではかなり面倒に思えますが、うまくいくので....すべてが良いと思います。