Właśnie zaktualizowałem Rails 3.1 i typowy formularz ajax do Utworzenie obiektu modelu powoduje następujący błąd: ActionView::Template::Error (undefined method gsub' for #<ActionDispatch::Flash::FlashHash:0x00000102b73b78>):
Rails 3.1 Formularz AJAX - "ActionView :: Szablon :: Błąd (niezdefiniowana metoda` gsub 'dla # <ActionDispatch :: Flash :: FlashHash: 0x00000102b73b78>): "
Działanie tworzenia przebiega prawidłowo, dane są przesyłane do bazy danych, ale strona się nie zmienia, a js nie jest wykonywane. js działa, jeśli wystąpił błąd, generując komunikat o błędzie zgodnie z oczekiwaniami ... Więc tylko sukces powoduje błąd i nie wykonuje js.
Oto mój kod:
Kontroler:
def create
@contact = Contact.new(params[:contact])
respond_to do |format|
if @contact.save
flash[:notice] = "Welcome!"
format.html
format.js
else
format.html { render 'pages/home'}
format.js
end
end
end
widok forma
<div id="contact_notice"></div>
<%= form_for @contact, :remote => true do |f| %>
<%= f.text_field :email, :id => 'email', 'data-default' => 'Sign up to join the beta!' %><%= f.submit "Submit", :id => 'submit' %>
<% end %>
/views/contacts/create.js.erb
<% if @contact.errors.any? %>
// Create errors
var errors = $('<div class="flash notice"></div>');
<% @contact.errors.full_messages.each do |error| %>
errors.append('<%= escape_javascript(error) %>');
<% end %>
// Display errors
$("#contact_notice").html(errors);
<% else %>
// Display success (clearing any errors)
$("#contact_notice").html('<div class="flash notice"><%=escape_javascript(flash.delete(:notice)) %></div>');
<% end %>
A oto śledzenie stosu, gdy nowy kontakt jest Zapisano:
Rendered contacts/create.js.erb (0.6ms)
Completed 500 Internal Server Error in 13ms
ActionView::Template::Error (undefined method `gsub' for #<ActionDispatch::Flash::FlashHash:0x000001042b1970>):
12: <% else %>
13:
14: // Display success (clearing any errors)
15: $("#contact_notice").html('<div class="flash notice"><%= escape_javascript(flash.delete(:notice)) %></div>');
16:
17: <% end %>
app/views/contacts/create.js.erb:15:in `_app_views_contacts_create_js_erb__3535867194219445180_2168748520'
app/controllers/contacts_controller.rb:6:in `create'
Daj mi znać, jeśli możesz zobaczyć, czego tu brakuje. Dziękuję.
można opublikować StackTrace że Rails generuje na konsoli lub w dzienniku, gdy pojawi się błąd? –
Tak tutaj: Renderowane kontakty/create.js.erb (0.6ms) Zakończono 500 Błąd wewnętrznego serwera w 13ms ActionView :: Szablon :: Błąd (niezdefiniowana metoda 'gsub 'dla #): 12: <% else %> 13: 14: // Wyświetlacz sukces (kasowanie błędów) . 15: $ ("#") contact_notice html ('<%= escape_javascript(flash.delete(:notice)) %> '); 16: 17: <% end %> app/views/Kontakt/create.js.erb: 15: w '_app_views_contacts_create_js_erb__3535867194219445180_2168748520' app/controllers/contacts_controller.rb: 6:' tworzyć” –
tuddy
może chcesz umieścić, że w OP, trudny do odczytania tutaj, a inni mogą chcieć go zobaczyć. –