2010-01-06 11 views
1

Assez nouveau sur les rails. Je fais une application de magasin de livres simple. Nous avons différents sujets tels que la physique, la chimie, la philosophie, etc ... Chaque domaine a quelques livres en dessous. L'URL se terminant par book/list listera tous les livres quels que soient les domaines. Les domaines apparaissent également dans la même page que le lien hypertexte. L'URL se terminant par book/show_subject/< sujet ID > répertorie tous les livres avec ce sujet id. Donc je clique sur le sujet si je veux voir les livres appartenant à ce domaine. La page livre/liste a un lien hypertexte vers une page où nous pouvons ajouter de nouveaux livres (book/new). Supposons qu'il n'y ait pas de livres pour ce sujet (disons physique), j'affiche un lien disant voulez-vous ajouter des livres ici? En cliquant sur le fait que cela m'amène à la page où j'entre l'information du livre + le domaine auquel le livre appartient (livre/nouveau). J'ai une liste déroulante pour le sujet ... comment puis-je configurer cette liste déroulante pour montrer la physique initialement, (puisque j'ai navigué à cette page après avoir remarqué qu'il n'y avait pas de physique dans le magasin).ruby ​​on rails: charger la page avec la valeur par défaut dans la liste déroulante/select

Répondre

0

une option pourrait être de faire le point de lien vers

/book/new?book_subject_id_=1 

et recieving la sélection dans le contrôleur avec cette ligne:

class BookController < #... 
    def new 
    @book = Book.new(:subject_id => params[:book_subject_id]) 
    #... 
    end 
    #... 
end 

va créer un objet livre AR avec le sujet que vous avez choisi .

Alors, selon vous, la forme sera définie pour accepter la @book, quelque chose comme:

<% form_for @book, :url => your_create_url, :method => { :post } do %> 
    <%= f.collection_select :subject_id, Subject.all.map{|s| [s.name, s.id]} %> 
... 

la partie importante est qui appelle la méthode id_sujet sur l'objet du livre afin que vous puissiez récupérer la valeur définir dans la demande.

cette manière, la sélection choisira le sujet de la physique

(note: selon les conventions de rails livre devrait être livres dans les contrôleurs et urls)

+0

Comment faire pour que le lien pointe vers/book/new? Book [subject_id] = 1? Vous avez essayé quelque chose comme <% = link_to 'Voulez-vous en ajouter un?', {: Action => 'nouveau'}, {: default_subject => @ subject.name}%> – deostroll

+0

désolé j'ai corrigé la réponse, vous devez manipulez cela dans votre nouvelle action dans BookController, dites moi si vous n'avez pas quelque chose – makevoid

+0

en train d'obtenir une erreur ici <% = collection_select: id, Subject.all.map {| s | [s.name, s.id]}%> Son mauvais nombre d'arguments (2 pour 5). PS: Je ne peux toujours pas créer le lien comme vous l'avez dit ...chaque fois que j'essaie de le rendre, il vient comme/book/new/1 ou book/new/2 en fonction du sujet depuis lequel j'ai navigué ... – deostroll

0

Habituellement, vous devez faire cela en ajoutant un paramètre à la requête GET. Vous pouvez l'ajouter à votre lien de cette façon:

link_to new_book_path, :default_subject => @subject.name 

Puis, dans l'action du contrôleur, vous attribuez les paramètres à votre nouvel objet:

class BookController < ActiveRecord 
    ... 
    def new 
    @book = Book.new 
    if param[:default_subject] 
     @book.subject = Subject.find_by_name(param[:default_subject]) 
    end 
    end 
    ... 

Vous n'avez pas besoin de changer votre forme tout , car il utilisera l'objet @book pour attribuer des valeurs par défaut (si vous utilisez les aides de marques de formulaire normales). Par exemple:

<% form_for @book do |form| %> 
    <%= form.collection_select :subject_id, Subject.all, :id, :name %> 
    .. other fields .. 
<% end %> 
+0

salut, Comment écrire la page new.html.erb pour ce contrôleur? – deostroll

+0

a ajouté un exemple de la façon de faire le formulaire. – jamuraa

Questions connexes