jQuery для моделей в Ruby on Rails - PullRequest
0 голосов
/ 07 октября 2010

У меня есть довольно простое приложение Ruby on Rails: две модели Lists и Items. Lists имеют много Items и Items принадлежат Lists. OK.

Метод show для ListsController печатает страницу со списком элементов, принадлежащих данному списку (частично lists/_listOfItems.html.erb). В конце представления show.html.erb есть форма, позволяющая пользователям добавлять элемент в список. В стандартном (без jQuery) RoR это работает отлично.

Теперь я хочу позволить пользователю добавить элемент в список без перезагрузки страницы. Мне удалось с помощью jQuery добавить элемент в базу данных, но теперь моя проблема заключается в обновлении списка HTML без перезагрузки страницы. Мне удалось выполнить create.js.erb в ItemsController, и я могу заставить вещи появляться на странице вместе с ним, но проблема в том, что этот create.js.erb живет в ItemsController, а не в ListsController, так что если я попытаюсь чтобы create.js.erb отобразил частичное _listOfItems.html.erb, произойдет сбой, поскольку create.js.erb находится в ItemsController и, следовательно, не может получить доступ к переменным, определенным в методе show ListsController.

Полагаю, это сработало бы как заклинание, если бы я использовал index метод ItemsController, чтобы отобразить список предметов, поскольку там все будет жить, но это может привести к дальнейшим осложнениям.

Надеюсь, это было ясно. Вы можете мне помочь? Большое спасибо!

1 Ответ

0 голосов
/ 07 октября 2010

Если я правильно понимаю, я думаю, что решение заключается в javascript + действие в вашем контроллере:

ваше представление должно иметь вызов ajax следующим образом, это должно быть вызвано щелчком / изменением / ...jquery function, например: $ ("селектор"). change (function () {здесь делается вызов ajax})

  $.ajax( {
    type: 'get',
    url: "/ajax/somepageofyourown",
    async: false,
    data: { add here any variables your controller method would need },
    success: function( r ) {
      $(' the selector that needs to be replaced ').html( r );
    }
  } );

добавить URL, который этот ajax вызывает для ваших маршрутов, чтобываш контроллер отвечает

добавьте действие вашего контроллера, должно сработать, которое отображает HTML, который вы хотите заменить предыдущим HTML.

...