Ich versuche, die Rails Flash-Hinweis in meiner Anwendung nur mit JavaScript zu erhalten. Ich habe ein Formular, das remote: true
nutzt, um eine AJAX-Anfrage an den Controller beim Einreichen zu stellen. Die Form sieht aus wie das Beispiel unten gezeigt:Flash-Benachrichtigung in Rails mit [Aktion] .js.erb aufrufen
# app/views/_email_register.html.erb
<%= simple_form_for :email, url: emails_path, remote: true do |f| %>
<div class="modal-body">
<div class="form-group">
<%= f.input :address, as: :email, placeholder: '[email protected]', label: false %>
</div>
</div>
<div class="modal-footer">
<%= f.submit 'Subscribe', class: 'btn btn-primary btn-block' %>
</div>
<% end %>
Die Rails-Anwendung wurde Schienen-Komponist generiert verwendet, die auch Bootstrap CSS installiert.
# app/controllers/emails_controller.rb
def create
@email = Email.new(email_params)
respond_to do |format|
if @email.save
format.html { redirect_to :back, notice: 'Email was successfully registerd' }
format.js
else
format.html { render :new }
format.js
end
end
end
Die Steuerung ruft dann die create.js.erb
als Teil des respond_to Blocks.
# app/views/emails/create.js.erb
// flash to user it was successful
$(".alert").html("Email was successfully registered");
Der _messages.html.erb
Teil wurde automatisch aus Rails-Composer generiert. Nicht sicher, ob diese teilweise aus dem JavaScript
# app/views/layouts/_messages.html.erb
<% flash.each do |name, msg| %>
<% if msg.is_a?(String) %>
<div class="alert alert-<%= name.to_s == 'notice' ? 'success' : 'danger' %>">
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
<%= content_tag :div, msg, :id => "flash_#{name}" %>
</div>
<% end %>
<% end %>
aufgerufen werden Jede mögliche Unterstützung, wie ich die Flash-Mitteilung über JavaScript bekommen zu zeigen, würde sehr geschätzt werden.
Vielen Dank für die schnelle Antwort. Ich habe versucht, '$ ('# flash_notice') hinzuzufügen. Html (" <% = escape_javascript (render 'layouts/messages')%> ");', aber die von der Steuerung zurückgegebene JS ist die folgende '$ ('# flash_notice '). html (""); 'Es scheint, dass kein' flash'-Objekt durchlaufen werden muss. – Knoxville
@Knoxville legte den Blitz mit 'format.js' –
Danke! Dies ist, was ich getan habe und es funktioniert gut für mich, bitte beraten, wenn das richtig ist: 'format.js {flash.now [: notice] = 'Email erfolgreich registriert wurde'}' – Knoxville