Я уверен, что упускаю что-то простое, но не зная правильной терминологии в Rails, я не могу найти то, что ищу ....
A Project
модель имеет_мани Task
, а Task
принадлежит_ Project
.
Мой routes.rb
имеет
resources :projects
resources :tasks
Я могу создавать / редактировать / изменять Projects
просто отлично,и я также могу редактировать Tasks
... но я не могу понять, как создать новый Task
, назначая при этом правильный Project
.
Моя Project
страница(например, / projects / 2) имеет ссылку Add Task, которая идет в / task / new, поэтому я теряю соединение.Я не хочу делать вложенный ресурс, потому что Tasks
после его создания будет уникально идентифицироваться по их идентификатору, а в будущем has_many и для других моделей.
Есть ли здесь быстрое исправление?
edit Ну, мне удалось решить эту проблему ... это уродливо и ужасно, и я не уверен, почему так должно быть, но это работает.
Мои маршруты:
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 %>
Мне не нужно былопоместите коробку проекта в форму, и я все еще не знаю, почему я должен, а также, почему мне нужно было взять: создать из из вложенных маршрутов.Это также кажется довольно трудоемким, для такой общей задачи, но это работает, так что ... Я думаю, это все хорошо.