1

У меня есть приложение Rails, и я запускаю rails g scaffold friends name. Внутри моей Friend модели, я ставлю это:

class Friend < ActiveRecord::Base 
    validates_presence_of :name 
end 

и это мой нового и создать действия внутри FriendsController:

def new 
    @friend = Friend.new 
    end 

... 

    def create 
    @friend = Friend.new(friend_params) 

    respond_to do |format| 
     if @friend.save 
     format.html { redirect_to @friend, notice: 'Friend was successfully created.' } 
     format.json { render :show, status: :created, location: @friend } 
     else 
     format.html { render :new } 
     format.json { render json: @friend.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

и это моя формы частичных для друзей:

<%= form_for(@friend) do |f| %> 
    <% if @friend.errors.any? %> 
    <div id="error_explanation"> 
     <h2><%= pluralize(@friend.errors.count, "error") %> prohibited this friend from being saved:</h2> 

     <ul> 
     <% @friend.errors.full_messages.each do |message| %> 
     <li><%= message %></li> 
     <% end %> 
     </ul> 
    </div> 
    <% end %> 

    <div class="field"> 
    <%= f.label :name %><br> 
    <%= f.text_field :name %> 
    </div> 
    <div class="actions"> 
    <%= f.submit %> 
    </div> 
<% end %> 

<script type="text/javascript"> 
    $(function(){ 
    console.log("Hello world!"); 
    }); 
</script> 

Как вы можете видеть, у меня есть jQuery $(document).ready() внизу моей формы, который регистрирует Hello world! при загрузке формы.

Когда я отправляю форму без имени, она снова отображает новый шаблон, но не вызывает это jQuery $(document).ready().

Демо:

enter image description here

Как вызвать JQuery $(document).ready() снова внутри рендер новый частичный, когда проверка (s) не удалось?

И почему это произошло?

+0

Вы используете концепцию turbolinks? – Jenorish

ответ

2

В Rails4 Концепция turbolinks поступит по умолчанию. Так $(document).ready() не загружается должным образом, так и может следовать ниже вариантов,

var ready; 
    ready = function() { 

     console.log("Hello world!"); 

     }; 

     $(document).ready(ready); 
     $(document).on('page:load', ready); 

Или

$(document).on('ready page:load', function() { 
    console.log("Hello world!"); 
}); 

Или

Вы можете использовать jquery.turbolinks драгоценный камень, чтобы избежать этой проблемы

Или

Вы можете использовать другие turbolinksevents, чтобы решить эту проблему.

Надеюсь, что это решит вашу проблему.