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)%>
<%= t(:channel_type)%> | <%= t(:label)%> | <%= t(:delivery_address)%> | <%= t(:activity)%> | <%= t(:settings)%> |
---|---|---|---|---|
<%= channel.channel_type.name %> | <%= channel.description %> | <%= channel.value %> | <%= channel.validated %> |
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