2010-01-31 8 views
0

J'ai deux modèles comme celui-ci:Rails et map.resources Aide Urls

class Topic < ActiveRecord::Base 
    has_many :articles 
end 

class Article < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :topic 
    has_many :comments 
end 

j'ai configurer la cartographie des ressources comme ceci:

map.resources :topics do |topic| 
    topic.resources :articles 
end 

Et je peux voir les articles très bien quand je appelez l'URL appropriée (par exemple /:topic_slug/articles/2). Dans les vues de mon article, j'utilise une poignée partielle à la création et l'édition des articles, comme celui-ci:

<% form_for(@article) do |f| %> 
    ... 
<% end %> 

Le problème arrises wen je tente de créer un nouveau article ou modifier un existant que je reçois le texte suivant erreur:

NoMethodError in Articles#new 

Showing app/views/articles/_form.html.erb where line #1 raised: 

undefined method `articles_path' for #<ActionView::Base:0x103d11dd0> 
Extracted source (around line #1): 

1: <% form_for(@article) do |f| %> 
2: <%= f.error_messages %> 
3: 
4: <p> 
Trace of template inclusion: app/views/articles/new.html.erb 

Est-ce que quelqu'un sait où je vais mal et ce qui me manque?

Répondre

4

Vous devez passer le sujet aussi:

<% form_for([@topic, @article]) do |f| %> 

Lorsque vous passez seulement @article à form_for qu'il tente de générer chemin correct basé sur @article - c'est pourquoi votre erreur dit que vous ne méthode avez pas article_path. Lorsque vous transmettez [@topic, @article] à form_for, il apparaîtra que vous souhaitez appeler topic_article_path.

Si vous n'avez pas @topic sur la création de nouvel article, alors vous avez probablement besoin de spécifier nouvelle route qui acceptent l'article sans sujet, il faut donc ajouter:

map.resources :articles 

Et puis:

<% form_for(@article) do |f| %> 

fonctionnera, mais il va générer l'URL comme: /articles/3 - sans partie de sujet.

0

Si vous voulez une route non-imbriquée pour les articles, les articles séparément carte ainsi:

map.resources :articles