ROR: вложенные ресурсы: NoMethodError

В моем приложении команды создаются для решения задачи. После создания команды участники могут присоединиться к ней.

Все работает при создании задачи -> команда, но когда дело доходит до добавления члена команды, я получаю эту ошибку:

Ошибка

NoMethodError в Team_members#new

Показ /home/vincent/solvabl/app/views/team_members/_form.html.erb, где строка № 1 поднята:

undefined method `team_team_members_path' for #<#<Class:0x9bdadcc>:0xa179df0>

Извлеченный источник (вокруг строки № 1):

1: <%= form_for([@challenge,@team,@team_member]) do |f| %>
2:   <% if @team_member.errors.any? %>
3:     <div id="error_explanation">
4:       <h2><%= pluralize(@team_member.errors.count, "error") %> prohibited this team_member from being saved:</h2>

След включения шаблона: app/views/team_members/new.html.erb

Rails.root: /home/vincent/solvabl Трассировка приложения | трассировка фреймворка | Полная трассировка

app/views/team_members/_form.html.erb:1:in `_app_views_team_members__form_html_erb___477348688_81202980'
app/views/team_members/new.html.erb:3:in `_app_views_team_members_new_html_erb___135218923_85112930'
app/controllers/team_members_controller.rb:36:in `new'

Запрос

Параметры:

{"challenge_id"=>"1",
 "team_id"=>"1"}

Показать дамп сеанса

Показать ответ дампа окружения

Заголовки:

None

Маршруты

resources :challenges do
  resources :teams do
    resources :team_members
  end
end

Контроллер

def create
    @team_member = TeamMember.new(params[:team_member])
    @team_member.team_id = @team.id
    @team_member.user_id = current_user.id

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

Просмотреть

<%= form_for([@team,@team_member]) do |f| %>
  <% if @team_member.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(@team_member.errors.count, "error") %> prohibited this team_member from being saved:</h2>

      <ul>
      <% @team_member.errors.full_messages.each do |msg| %>
        <li><%= msg %></li>
      <% end %>
      </ul>
    </div>
  <% end %>

  <div class="field">
    <%= f.label :team_id %><br />
    <%= f.number_field :team_id %>
  </div>
  <div class="field">
    <%= f.label :user_id %><br />
    <%= f.number_field :user_id %>
  </div>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

Любая помощь высоко ценится!


person Thomas Vincent Blomberg    schedule 21.08.2013    source источник


Ответы (1)


Маршруты, которые у вас есть, дадут вам challenges_team_team_members_path. Чтобы получить team_team_members_path, добавьте к config/routes.rb следующее:

resources :teams do 
  resources :team_members
end

Обновление:

Обратите внимание, что это дополнение должно быть дополнением к тому, что вы уже определили. Итак, ваш routes.rb будет иметь:

resources :challenges do
  resources :teams do
    resources :team_members
  end
end

resources :teams do 
  resources :team_members
end
person vee    schedule 21.08.2013
comment
Спасибо, vinodadhikary, это действительно имеет большой смысл. Я собираюсь попробовать это, когда вернусь к своему компьютеру. Я дам вам знать, если это сработает. Еще раз спасибо! - person Thomas Vincent Blomberg; 21.08.2013