2010-05-25 7 views
2

Je viens donc de démarrer dans Rails et j'essaie de créer un objet (un book_loan dans mon cas) avec un formulaire. Le truc c'est que j'arrive à ce formulaire en cliquant sur un livre, donc je passe le book_id en paramètre, comme localhost: 3000/loans/new? Id = 1.Comment définir une valeur prédéfinie dans un formulaire dans Rails

Maintenant, je ne veux pas que l'utilisateur soit en mesure de définir le champ ID livre dans le formulaire, puisque je connais déjà l'ID. Donc, ma question est de savoir comment définir la valeur dans le formulaire. J'ai essayé des choses comme:

<% form_for(@loan) do |f| %> 
    <%= f.error_messages %> 
    ... 
    <%= @loan.book_id = params[:id] %> 
    <%= f.submit 'Create' %> 
<% end %> 

sans succès. Est-ce que quelqu'un a un indice pour moi?

Répondre

4

Dans l'action create de votre contrôleur, vous pouvez mettre la main sur l'instance du livre, puis construire un nouveau prêt par l'association, en passant les valeurs soumises à partir du formulaire. Quelque chose comme ceci:

def new 
    @loan = Loan.new 
end 

def create 
    book = Book.find(params[:id]) 
    @loan = book.loans.build(params[:loan]) 
    @loan.save # etc... 
end 

Parce que vous construisez le nouveau prêt par l'association, il aura le book_id correcte sur elle.

+0

Ensuite, vous devrez faire quelque chose de similaire dans l'action create. –

+0

Ryan a raison. J'ai mis à jour ma réponse en conséquence. –

+0

Quel contrôleur? – justinxreese

2

Dans votre action du contrôleur, définissez @loan.book_id à params[:id], puis, dans votre modèle:

<%= f.hidden_field :book_id %>

+3

L'utilisateur doit utiliser un routage reposant pour cela. Un champ caché est un hack. –

Questions connexes