J'ai une situation très commune et une solution, mais je voudrais demander aux experts de Rails si elle peut être améliorée.Rails: quelle est la manière "correcte" (idiomatique) de passer un paramètre de new à créer dans un contrôleur RESTful?
J'ai un contrôleur RESTful très typique où l'utilisateur fournit certains des attributs d'objet lors de la création. Il existe un modèle thing
, un ThingsController
et diverses vues, y compris new
, create
et un _form
partiel.
Une chose a deux attributs,
- une couleur, qui est fixé quand ils ont frappé un lien pour le créer (par exemple un lien « Créer Red Thing » qui code l'ID de rouge comme une URL paramètre)
- une description, qui est entré par l'utilisateur sous la forme vue
Je suis satisfait de l'approche pour faire face à un attribut comme la THA description t qu'un utilisateur spécifie dans le formulaire, mais moins sûr de la façon dont je gère un attribut qui est transmis via les paramètres d'URL associés au premier clic.
C'est ce que je fais en ce moment (notez que j'ai omis la vérification d'erreur pour simplifier les choses). Tout d'abord, mes new
et create
méthodes dans le contrôleur sont les suivants:
def new
@thing = Thing.new
@thing.color = Color. find(params[:color])
end
def create
@thing = Thing.new(params[:thing])
@thing.color = Color. find(params[:color])
if @thing.save
flash[:notice] = "Successfully created thing."
redirect_to somewhere_url
else
render :action => 'new'
end
end
La vue new
invoque juste la partie, _form
qui se présente comme suit:
<% form_for @thing do |f| %>
<%= f.error_messages %>
<%= hidden_field_tag "color", @thing.color.id %>
<%= f.label :description %>
<%= f.text_area :description %>
<%= f.submit "Submit" %>
<% end %>
Il semble un peu désordonné à passer l'ID de couleur jusqu'à la méthode create
en tant que paramètre d'URL en plaçant un champ masqué dans le formulaire. Cela semble-t-il raisonnable, ou y a-t-il une autre approche qui serait meilleure?
Merci beaucoup jamuraa. C'est beaucoup plus propre. – Greg