ho una visione sul mio progetto attuale, che fa qualcosa di simile al seguente (in Haml):generazione di ID HTML uniche in Rails quando si utilizza un parziale ripetuto che ha form_for
[email protected] do |horse|
= render :partial => 'main/votingbox', :locals => {:horse => horse}
L'nel _votingbox.html. file di Haml ho il seguente:
%div.votingbox
%span.name= horse.name
%div.genders
- if horse.male
%img{:src => 'images/male.png', :alt => 'Male'}
- if horse.female
%img{:src => 'images/female.png', :alt => 'Female'}
%div.voting_form
= form_for(Vote.new, {:url => horse_vote_path(horse)}) do |f|
= f.label :comment, "Your opinion"
= f.text_field :comment
...
a bunch of labels and input elements follow generated using the form helpers
Questo genererà il codice di lavoro, ma lo fa generare forme con lo stesso iD per tutti gli elementi del modulo che rende valido il codice HTML una volta che il votingbox parziale viene reso una seconda volta.
La mia prima supposizione a risolvere questo è stato quello di specificare un unico: id per form_for ma che si applica solo al tag form generato da form_for e non uno qualsiasi dei tag all'interno del blocco form_for.
Una soluzione definitiva a questo problema è quella di passare e definire manualmente i miei ID univoci su form_for e tutti gli elementi del modulo che utilizzo. Questo è più lavoro di quanto avessi sperato.
C'è un modo più semplice o più semplice per ottenere ID univoci in un formato simile al modo in cui Rails li genera attualmente su tutti i miei elementi del modulo?
get_vote in questo scenario restituirà sempre "Vote.new", che sarà un oggetto ActiveRecord non salvato. Ho modificato di conseguenza la domanda originale. Ciò che sarebbe ideale qui è se potessi generare i form id in base all'ID dell'oggetto horse. In questa situazione l'id per il modulo sarebbe 'vote_new_1' per quando quel partial è reso per l'oggetto Horse con id 1. – cyberkni
Ho aggiornato la risposta, per favore vedi. – edgerunner
Posso suggerire: ': id => dom_id (horse, 'vote')' per generare 'horse_123_vote'. È più facile da leggere. – Ariejan