Rails 3 Създаване на вложен ресурс Няма маршрут, който съответства на грешка

Аз съм нов в Rails и се опитвам да създам дъщерен запис във вложен ресурс. Моят файл routes.rb съдържа това:

resources :sports do
  resources :teams
end

Моят файл teams_controller.rb съдържа това за create def:

def create
@sport = Sport.find(params[:sport_id])
@team = @sport.teams.build(params[:team_id])

respond_to do |format|
  if @team.save
    format.html { redirect_to @team, notice: 'Team was successfully created.' }
    format.json { render json: @team, status: :created, location: @team }
  else
    format.html { render action: "new" }
    format.json { render json: @team.errors, status: :unprocessable_entity }
  end
end

край

И моят частичен _form.html.erb (в моя new.html.erb в папката app/views/teams кодът е:

<%= form_for(@team) do |f| %>
<% if @team.errors.any? %>
<div id="error_explanation">
  <h2><%= pluralize(@team.errors.count, "error") %> prohibited this team from being saved:</h2>
  <ul>
  <% @team.errors.full_messages.each do |msg| %>
    <li><%= msg %></li>
  <% end %>
  </ul>
</div>
 <div class="field">
 <%= f.label :city %><br />
 <%= f.text_field :city %>
  </div>
  <div class="actions">
    <%= f.submit %>
</div>
<% end %>

Когато се опитам да изпратя във формуляра, получавам следната грешка:

"No route matches [POST] "/teams" "

И накрая, когато рейкам маршрути, получавам това:

sport_teams GET    /sports/:sport_id/teams(.:format)          teams#index
            POST   /sports/:sport_id/teams(.:format)          teams#create
new_sport_team GET    /sports/:sport_id/teams/new(.:format)      teams#new
edit_sport_team GET    /sports/:sport_id/teams/:id/edit(.:format) teams#edit
 sport_team GET    /sports/:sport_id/teams/:id(.:format)      teams#show
            PUT    /sports/:sport_id/teams/:id(.:format)      teams#update
            DELETE /sports/:sport_id/teams/:id(.:format)      teams#destroy
     sports GET    /sports(.:format)                          sports#index
            POST   /sports(.:format)                          sports#create
  new_sport GET    /sports/new(.:format)                      sports#new
 edit_sport GET    /sports/:id/edit(.:format)                 sports#edit
      sport GET    /sports/:id(.:format)                      sports#show
            PUT    /sports/:id(.:format)                      sports#update
            DELETE /sports/:id(.:format)                      sports#destroy

Очаквам екипът да спести от надграждането на екипа и да ме насочи към страницата на екипа на шоуто. Някой знае ли/вижда ли какво е това, което правя погрешно?


person T-bonemcgee    schedule 21.04.2012    source източник


Отговори (1)


Трябва да подадете form_for масив от спорта и отбора:

<%= form_for([@sport, @team]) do |f| %>

Същото с redirect_to:

format.html { redirect_to [@sport, @team], notice: 'Team was successfully created.' }

От Rails API:

If your resource has associations defined, for example, 
you want to add comments to the document given that the routes
are set correctly:

<%= form_for([@document, @comment]) do |f| %>
 ...
<% end %>

Where 
  @document = Document.find(params[:id]) 
and 
  @comment = Comment.new.
person pjumble    schedule 21.04.2012
comment
Това свърши работа - благодаря. Бях пробвал този във формуляра, но пренебрегнах този в контролера (redirect_to) и това ме бъркаше. - person T-bonemcgee; 22.04.2012