Это именно тот код, который работал для меня:
<p>You'll be automatically redirected in <span id="count">10</span> seconds...</p>
<script type="text/javascript">
window.onload = function(){
(function(){
var counter = 10;
setInterval(function() {
counter--;
if (counter >= 0) {
span = document.getElementById("count");
span.innerHTML = counter;
}
// Display 'counter' wherever you want to display it.
if (counter === 0) {
// alert('this is where it happens');
clearInterval(counter);
}
}, 1000);
})();
}
</script>
<meta http-equiv="refresh" content="10;url=http://www.example.com" />
Надеюсь, это поможет;)
Rails не очень поможет вам в этом. Это противоречит стандартным соглашениям о представлении, поэтому вам придется искать обходные пути в представлении, контроллере и даже маршрутах. Это не весело.
Ключевыми ресурсами по работе с многомодельными формами в стиле Rails являются серия params-foo Стивена Чу , или, если вы используете Rails 2.3, посмотрите Nested Object Forms
Это станет намного проще, если вы определите какой-то особый ресурс, который вы редактируете, например, фотосет. Фотосет может быть настоящим, Тип модели ActiveRecord или это может быть просто фасад, который принимает данные и выдает ошибки, как если бы это была модель ActiveRecord.
Теперь вы можете написать форму представления примерно так:
<%= form_for :photoset do |f|%>
<% f.object.photos.each do |photo| %>
<%= f.fields_for photo do |photo_form| %>
<%= photo_form.text_field :caption %>
<%= photo_form.label :caption %>
<%= photo_form.file_field :attached %>
<% end %>
<% end %>
<% end %>
Ваша модель должна проверять каждую дочернюю фотографию, которая приходит и обобщает их ошибки. Вы можете прочитать хорошую статью о том, как включить проверки в любой класс . Это может выглядеть примерно так:
class Photoset
include ActiveRecord::Validations
attr_accessor :photos
validate :all_photos_okay
def all_photos_okay
photos.each do |photo|
errors.add photo.errors unless photo.valid?
end
end
def save
photos.all?(&:save)
end
def photos=(incoming_data)
incoming_data.each do |incoming|
if incoming.respond_to? :attributes
@photos << incoming unless @photos.include? incoming
else
if incoming[:id]
target = @photos.select { |t| t.id == incoming[:id] }
end
if target
target.attributes = incoming
else
@photos << Photo.new incoming
end
end
end
end
def photos
# your photo-find logic here
@photos || Photo.find :all
end
end
Используя модель фасада для Фотосета, вы можете сделать свой контроллер и логику представления простой и понятной, сохранив самый сложный код для специальной модели. Этот код, вероятно, не выйдет из коробки, но, надеюсь, он даст вам некоторые идеи и укажет правильное направление для решения вашего вопроса.
<%= form_for :photoset do |f|%>
<% f.object.photos.each do |photo| %>
<%= f.fields_for photo do |photo_form| %>
<%= photo_form.text_field :caption %>
<%= photo_form.label :caption %>
<%= photo_form.file_field :attached %>
<% end %>
<% end %>
<% end %>
Ваша модель должна проверять каждую приходящую дочернюю фотографию и объединять их ошибки. Вы можете прочитать хорошую статью о том, как включить проверки в любой класс . Это может выглядеть примерно так:
class Photoset
include ActiveRecord::Validations
attr_accessor :photos
validate :all_photos_okay
def all_photos_okay
photos.each do |photo|
errors.add photo.errors unless photo.valid?
end
end
def save
photos.all?(&:save)
end
def photos=(incoming_data)
incoming_data.each do |incoming|
if incoming.respond_to? :attributes
@photos << incoming unless @photos.include? incoming
else
if incoming[:id]
target = @photos.select { |t| t.id == incoming[:id] }
end
if target
target.attributes = incoming
else
@photos << Photo.new incoming
end
end
end
end
def photos
# your photo-find logic here
@photos || Photo.find :all
end
end
Используя модель фасада для Фотосета, вы можете сделать свой контроллер и логику представления простой и понятной, сохранив самый сложный код для специальной модели. Этот код, вероятно, не выйдет из коробки, но, надеюсь, он даст вам некоторые идеи и укажет правильное направление для решения вашего вопроса.
<%= form_for :photoset do |f|%>
<% f.object.photos.each do |photo| %>
<%= f.fields_for photo do |photo_form| %>
<%= photo_form.text_field :caption %>
<%= photo_form.label :caption %>
<%= photo_form.file_field :attached %>
<% end %>
<% end %>
<% end %>
Ваша модель должна проверять каждую приходящую дочернюю фотографию и объединять их ошибки. Вы можете прочитать хорошую статью о том, как включить проверки в любой класс . Это может выглядеть примерно так:
class Photoset
include ActiveRecord::Validations
attr_accessor :photos
validate :all_photos_okay
def all_photos_okay
photos.each do |photo|
errors.add photo.errors unless photo.valid?
end
end
def save
photos.all?(&:save)
end
def photos=(incoming_data)
incoming_data.each do |incoming|
if incoming.respond_to? :attributes
@photos << incoming unless @photos.include? incoming
else
if incoming[:id]
target = @photos.select { |t| t.id == incoming[:id] }
end
if target
target.attributes = incoming
else
@photos << Photo.new incoming
end
end
end
end
def photos
# your photo-find logic here
@photos || Photo.find :all
end
end
Используя модель фасада для Фотосета, вы можете сделать свой контроллер и логику представления простой и понятной, сохранив самый сложный код для специальной модели. Этот код, вероятно, не выйдет из коробки, но, надеюсь, он даст вам некоторые идеи и укажет правильное направление для решения вашего вопроса.
вы можете сделать свой контроллер и логику простой и понятной, оставив самый сложный код для специальной модели. Этот код, вероятно, не выйдет из коробки, но, надеюсь, он даст вам некоторые идеи и укажет правильное направление для решения вашего вопроса. вы можете сделать свой контроллер и логику простой и понятной, оставив самый сложный код для специальной модели. Этот код, вероятно, не выйдет из коробки, но, надеюсь, он даст вам некоторые идеи и укажет правильное направление для решения вашего вопроса.Вы можете использовать синтаксис «название модели []» для представления нескольких объектов.
В поле зрения используйте "фото []" в качестве названия модели.
<% form_for "photo[]", :url => photos_update_path do |f| %>
<% for @photo in @photos %>
<%= render :partial => "photo_form", :locals => {f => f} %>
<%= submit_tag "Save"%>
<% end %>
<% end %>
Это заполнит поля ввода, как вы описали.
В вашем контроллере вы можете выполнять массовые обновления.
def update
Photo.update(params[:photo].keys, params[:photo].values)
...
end