2012-11-27 1 views
0

Voici mon code comme il se trouve maintenant ...Définition d'une association clé étrangère basée sur la route

class Article < ActiveRecord::Base 
    has_many :registrations 

class Registration < ActiveRecord::Base 
    belongs_to :article 

#app/views/articles/show.html.erb 
    <%= link_to 'Register', new_registration_path({:article_id => @article}) %> 

#app/views/registrations/_form.html.erb 
    <%= f.hidden_field :article_id %> 

#app/controllers/registrations_controller.rb 
def new 
    @registration = Registration.new 
    @registration.article = Article.find params[:article_id] 

..et cela fonctionne juste Peachy. Cependant, je voudrais vous débarrasser du code dans l'application/vues/articles/show.html.erb et faire avec une route ...

<%= link_to 'Register', new_article_registration_path(@article) %> 

... et je voudrais également vous débarrasser de hte hidden_field que j'utilise dans la vue des inscriptions. Je sais que je dois ajouter une méthode de construction à mon contrôleur, mais je ne suis pas sûr de l'ajouter à l'article ou au contrôleur d'enregistrement. Toute aide appréciée!

Répondre

0

Dans votre routes.rb vous pouvez faire des ressources imbriquées:

resources :articles do 
    resources :registrations 
end 

Ensuite, vous pouvez faire vos liens en utilisant la "magie" de la méthode polymorphic_url dans votre link_to aide:

<%= link_to 'Register', [:new, @article, :registration] %> 
+0

Thanx jdoe .. est <% = link_to 'Register', [: new, @article,: registration]%> différent de <% = link_to 'Register', new_article_registration_path (@article)%>? J'ai le même code dans mon fichier routes.rb. Mais je n'obtiens pas article_id en tant que paramètre lorsque je sauvegarde un enregistrement. – Lumbee

+0

@Lumbee Oui, c'est fondamentalement le même, mais plus concis. C'est étrange que votre code n'a pas fonctionné. Vérifiez si vous n'avez pas perdu le 's' final dans' resources' pour vos ': articles'. – jdoe

+0

Non, mes itinéraires sont bons. Je pense que j'ai besoin de quelque chose comme @article = article.find params [: article_id] 'ou' @registration = @ article.registrations.build 'dans mon contrôleur d'enregistrements. – Lumbee

Questions connexes