Ho un modello aziendale che può avere più tag. Funziona bene, ma in un'occasione non funziona. L'occasione è quando la convalida del modello aziendale fallisce. Dopo: render => 'edit' non mostra i tag nella vista. Sospetto che data-pr non stia prendendo i dati correttamente. Mi piacerebbe anche che i tag fossero conservati quando si risolvono le convalide.Ruby on Rails - Token di input JS, un problema quando la convalida fallisce
Ho avuto questa idea da qui: http://railscasts.com/episodes/167-more-on-virtual-attributes
Io uso di input di controllo token: http://loopj.com/jquery-tokeninput/
Questo è quello che ho nel modello di impresa per quanto riguarda i tag_tokens:
before_save :save_tag_tokens
attr_writer :tag_tokens
attr_accessible :tag_tokens
def tag_tokens
@tag_tokens || tags.to_json(:only => [:id, :name])
end
def save_tag_tokens
if @tag_tokens
@tag_tokens.gsub!(/CREATE_(.+?)_END/) do
Tag.create!(:name => $1.strip.downcase).id
end
self.tag_ids = @tag_tokens.split(",")
end
end
ecco il codice dal punto di vista:
<div class="input text no-border">
<% Tag.include_root_in_json = false %>
<%= company_form.label :tag_tokens, t('form.account.company.edit.company_tags_html')%>
<%= company_form.text_field :tag_tokens, :id => 'company_tag_tokens', "data-pre" => @company.tag_tokens%>
<p class="tip"><%= t('form.account.company.edit.tag_tip') %></p>
</div>
ED IT:
OK, quindi vedo qual è il problema con il codice precedente.
Quando carico i dati della pagina di modifica-pre contiene questo: data-pre="[{"id":1704,"name":"dump truck"}]"
. quando invio il modulo con errore di convalida, il data-pre contiene: data-pre="1704"
.
se cambio il codice a questo:
def tag_tokens
tags.to_json(:only => [:id, :name])
end
nuovi tag che non sono stati ancora Salva per il modello di società vengono rimossi, perché sono letti dal DB ogni volta. Come posso conservare i dati inseriti tra le transizioni del modulo?
qualcuno può aiutare? – MJM