Обновить представление в Rails 3.2 без JavaScript или AJAX - PullRequest
0 голосов
/ 07 февраля 2012

Как мне обновить представление без Javascript / AJAX, чтобы оно вызывало метод в моей модели в Rails 3.2?

Модель твитов:

class Tweet < ActiveRecord::Base
  def self.get_tweets
    #get more tweets code and store in DB
  end
end

Контроллер твитов:

class TweetsController < ApplicationController
  def index
    @all_tweets = Tweet.all
  end
end

Как мне вызвать функцию get_tweets через кнопку или ссылку в индексном представлении? Я не хочу, чтобы страница обновлялась каждый раз, только когда я нажимаю на ссылку / кнопку Обновить.

Спасибо

Ответы [ 3 ]

2 голосов
/ 07 февраля 2012

Если вы не можете / не хотите использовать JavaScript для обновления части страницы, вам необходимо перезагрузить всю страницу.Вы можете делать это каждые несколько секунд с помощью метатега:

<!-- refresh every 30 seconds -->
<meta http-equiv="refresh" content="30">

или создать ссылку на страницу:

<a href="...">Refresh Tweets</a>

или создать форму:

<form action="..." method="post">
  <input type="submit" value="Refresh Tweets">
</form>

Если ни один из них не подходит, вы можете встроить элемент <iframe> на свою страницу и просто обновить этот документ по требованию.

2 голосов
/ 07 февраля 2012

добавить маршрут в ваши маршруты.rb

get "Tweets/update_tweet"

затем добавьте действие к вашему TweetsController

def update_tweet
 Tweet.get_tweets
 redirect_to :action => "index"
end

и на ваш взгляд добавьте ссылку на новый маршрут

<%= link_to "Update Tweets", "/Tweets/update_tweet"%>

При нажатии на ссылку запускается действие update_tweet, которое обновит вашу базу данных и перенаправит на действие индекса, которое отобразит обновленные твиты.

1 голос
/ 07 февраля 2012

Если вы не хотите использовать Javascript для загрузки данных, но ваши пользователи включили Javascript в своих браузерах, просто создайте ссылку или кнопку, подобную этой:

<a href="javascript:window.location.reload()">Reload Page</a>
<input type="button" value="Reload Page" onClick="window.location.reload()">
...