Как я могу использовать JQuery для загрузки контента из базы данных с помощью метода действий ruby ​​on rails? - PullRequest
1 голос
/ 20 июня 2009

У меня есть страница, на которой необходимо извлечь контент из базы данных и, возможно, из других источников.

Так я структурировал свое приложение ruby ​​on rails.

/ Index - здесь есть три разных раздела, которые нужно загружать в три разных типа контента. Каждому из них потребуется разное количество времени для возврата, поэтому я хочу отобразить сообщение о загрузке, пока я играю, чтобы каждый div заполнялся данными.

Чтобы загрузить данные, в идеале я хочу вызвать метод Ruby на моем контроллере, а затем визуализировать частичное.

У меня был поиск вокруг, но я не вижу, как можно загрузить индекс страницы, а затем загрузить данные из методов действия как отдельное действие.

Ответы [ 3 ]

4 голосов
/ 29 июня 2009

Если вы используете более позднюю версию Rails и хотите сделать это как можно более ненавязчивым, вы должны использовать опции: response_to в вашем контроллере, например:

class MyController < ApplicationController

  def first_method
     respond_to do |format|
        format.html # this handles normal requests asking for html
        format.js # this handles requests asking for javascript to be sent instead
      end
  end

end

Если вы отвечаете на клик, вам нужно будет выполнить запрос, например, на странице

$("a.element_you_click_to_trigger").click(function(e) {
  e.preventDefault(); // make sure clicking doesn't trigger unneeded event bubbling
  $.ajax({url: "/controller/first_method", type: "POST", dataType: "script"}); // send a request and tell the server that you want javascript back
}

Так же, как у вас есть файл index.html.erb в вашей папке представлений для этого контроллера, у вас будет аналогичный файл first_method.js.erb в соответствующей папке представлений вдоль стороны Ваш index.html.erb файл:

views
  controller
    index.html.erb
    first_method.js.erb

Это вернет javascript, который исполняется на стороне клиента, но получает на стороне сервера сборки, поэтому вы можете содержать фрагменты ERB rails, чтобы вы могли сделать что-то вроде этого:

$('#loading_placeholder_element').html('<%= escape_javascript(render(:partial => "create")) %>');

// do some other stuff you fancy in the page

// then make the next call once the other stuff is over (you may need to add this as a call back on an animation):
$.ajax({url: "/controller/second_method", type: "POST", dataType: "script"});

Затем вы повторите этот же процесс снова для каждого из более длинных методов, выделенных fsmf.

Я нашел это Railscast на jQuery невероятно полезным, когда я изучал это пару месяцев назад, и я действительно рекомендовал бы его.

Надеюсь, это поможет!

0 голосов
/ 20 июня 2009

Предполагается, что вы установили jRails plugins .

class MyController < ApplicationController

  def index
    # your main action
  end

  def long_section
    # this method should accept XHR requests
    # and render the HTML view
    # long_section.html.erb
    render :layout => false # or partial
  end

  def very_long_section
    # this method should accept XHR requests
    # and render the HTML view
    # very_long_section.html.erb
    render :layout => false # or partial
  end

end

В вашем представлении index.html.erb.

<h1>Index</h1>

<div id="index">First section here.</div>
<div id="second">Second section here.</div>
<div id="third">Third section here.</div>

<%= remote_function(:action => "long_section", :update => "second") %>
<%= remote_function(:action => "very_long_section", :update => "third") %>
0 голосов
/ 20 июня 2009

Для этого нужно использовать ajax.

http://docs.jquery.com/Ajax

Я не знаю, как использовать рубин или рубин на рельсах. Но я думаю, что концепция та же самая.

Пример:

$.post("yourAjaxTarget.html",{ //html as an example
    attribute1: "blabla",
    attribute2: 1234
      }, function(data){
         //do something
      }, "json");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...