Как правильно создать объект с ассоциацией own_to? - PullRequest
0 голосов
/ 16 июля 2011

Я довольно новичок в рельсах, и у меня есть некоторые проблемы с получением философии и поиском "правильного" способа создания объекта как зависимости от другого.

У меня есть Backlog модель:

class Backlog < ActiveRecord::Base
  has_many :user_stories
end

и UserStory модель:

class UserStory < ActiveRecord::Base
  belongs_to :backlog
end

В действии show контроллера Backlog я хочу отобразить ссылку для создания UserStory, который принадлежит текущему Backlog. Я хочу, чтобы он перенаправил на форму создания UserStory.

<%= link_to 'New User story', "???" %>

если я поставлю new_user_story_path, он создаст новый UserStory, но не добавит его к Backlog.

Как мне поступить?

Спасибо!

1 Ответ

3 голосов
/ 16 июля 2011

Вам нужно иметь вложенные маршруты.

app/config/rotues.rb

CodeGlot::Application.routes.draw do

  resources :backlogs do
    resources :user_stories
  end

end

Тогда вам нужно иметь вложенную ссылку:

index.html.erb # or whatever file

<%= link-to "New user story", new_backlog_user_story_path(backlog) %>

* убедитесь, что у вас есть переменное отставание, иначе маршрут потерпит неудачу.

app/controllers/user_stories_controller.rb

before_filter :get_backlog

def get_backlog
    if params[:backlog_id]
        @backlog = Backlog.find(params[:backlog_id])
    end
end

def new
end

app/views/user_stories/new.html.erb

<div class="form">
<%= form_for([@backlog, @user_stories]) do |f| %>
  <div class="actions">
    <%= f.submit "Submit",  :disable_with => "Submitting..." %>
  </div>
<% end %>
</div>

app/models/backlog.rb

accepts_nested_attributes_for :user_stories
...