Problem z zagnieżdzonymi ROUTES

Robię swój pierwszy serwis przy użyciu RoR3 i mam problem z routes’ami. Posidam dwie klasy Friend i FriendChannel. Każdy zalogowany użytkownik ma swoją listę friend’ów a friendy mają swoją listę FriendChannelsów :). Kod wygląda następująco:

Model:

[code]class Friend < ActiveRecord::Base
attr_accessible :birth_date, :name, :sex, :surname

belongs_to :user
has_many :friend_channels, :dependent => :destroy
has_and_belongs_to_many :friend_groups
end

class FriendChannel < ActiveRecord::Base
attr_accessible :description, :operator, :validated, :value, :channel_type_id

belongs_to :channel_type
belongs_to :friend
end[/code]
Routes dla tych dwóch klas zapisałem następująco:

resources :friends do resources :friend_channels end
polecenie rake routes pokazuje że wygenerowane zostały następujące ścieżki:

friend_friend_channels GET /friends/:friend_id/friend_channels(.:format) friend_channels#index
POST /friends/:friend_id/friend_channels(.:format) friend_channels#create
new_friend_friend_channel GET /friends/:friend_id/friend_channels/new(.:format) friend_channels#new
edit_friend_friend_channel GET /friends/:friend_id/friend_channels/:id/edit(.:format) friend_channels#edit
friend_friend_channel GET /friends/:friend_id/friend_channels/:id(.:format) friend_channels#show
PUT /friends/:friend_id/friend_channels/:id(.:format) friend_channels#update
DELETE /friends/:friend_id/friend_channels/:id(.:format) friend_channels#destroy

Widok friend_channels/index

[code]

FriendsChannels#index

<%= link_to t(:new_channel), new_friend_friend_channel_path(@friend)%>

<% @friend_channels.each do |channel| %>

<% end %>
<%= t(:channel_type)%> <%= t(:label)%> <%= t(:delivery_address)%> <%= t(:activity)%> <%= t(:settings)%>
<%= channel.channel_type.name %> <%= channel.description %> <%= channel.value %> <%= channel.validated %>
[/code] controller friend_channels [code] def new @friend_channel = FriendChannel.new @channel_types = ChannelType.all end

def create
friend_channel = current_user.friends.find(params[:friend_id]).friend_channels.new(params[:friend_channel])
friend_channel.validated = false

if friend_channel.save
  redirect_to friend_friend_channels_path, :id => params[:id]
else
  render action: "new"
end

end[/code]
I teraz problem. Gdy zaloguję się jako użytkownik, kliknę na listę Friendsów następnie na listę FriendChannels danego Frienda to wszystko jest ok w przeglądarce widać że urle działają prawidłowo problem pojawia się w momencie gdy chcę dodać nowy friendChannel wywala błąd

NoMethodError in Friend_channels#new

Showing C:/Users/…/app/views/friend_channels/_form.html.erb where line #1 raised:

undefined method `friend_channels_path’ for #<#Class:0x356e0b0:0x2e0a9e8>
Extracted source (around line #1):

1: <%= form_for(@friend_channel) do |f| %>
2:
3:
4:

Dodałem do rake routes resources :friend_channels co pomogło w otwarciu formularza tworzącego nowy friend channel ale gdy chcę zapisać obiekt w przegądarce adres url jest http://localhost:3000/friend_channels pominoł frienda i wywalił błąd
ActiveRecord::RecordNotFound in FriendChannelsController#create

Couldn’t find Friend without an ID
Rails.root: C:/Users/golowka.EXORIGO/My Documents/Aptana Studio 3 Workspace/dont4get

Application Trace | Framework Trace | Full Trace
app/controllers/friend_channels_controller.rb:9:in `create’

HELP :slight_smile:

form_for ma problem ze znalezieniem named helpera routingu przy zagnieżdżonych resources.
Na szybko, możesz albo przekazywać właściwy url w opcjach form_for, albo pozbyć się zagnieżdżenia w nazwie helpera/urlu
(popatrz na dokumentację dla resources, w railsach 3.2 jest opcja shallow -> http://railsapi.com/doc/rails-v3.2.6/classes/ActionDispatch/Routing/Mapper/Resources.html )

<%= form_for [:friend, @friend_channel] do |f| %> <% end %>