Ruby on Rails и jeditable (jquery) - PullRequest
       10

Ruby on Rails и jeditable (jquery)

13 голосов
/ 21 октября 2008

Кто-нибудь получил плагин jquery jeditable для правильной работы в приложениях Rails. Если да, не могли бы вы поделиться некоторыми советами о том, как его настроить? У меня возникли проблемы с созданием "submit-url".


IIRC, вы не можете просто вызвать код ruby ​​из javascript (пожалуйста, позвольте мне ошибаться :-). Вы имеете в виду RJS ??? Разве это не ограничено Прототипом? Я использую jQuery.


UPDATE:
э-э ..... спросил это некоторое время назад и тем временем переключился на другое решение. Но IIRC моей главной проблемой было следующее:

Я использую ресурсы RESTful. Допустим, мне нужно смоделировать блог и, таким образом, иметь ресурс «сообщения». Если я хочу отредактировать сообщение (например, сообщение с идентификатором 8), мое обновление отправляется через HTTP на URL http://my.url.com/posts/8 с глаголом HTTP POST. Этот URL, однако, построен в моем коде Rails. Итак, как мне получить мой submit-url в моем коде jQuery? Поскольку это код RESTful, URL-адрес моего обновления будет меняться с каждым сообщением.

Ответы [ 5 ]

9 голосов
/ 15 февраля 2009

Вот как я подключил JEditable (1.6.2) к моему приложению Rails (2.2.2):

Встроенная форма:

<div id="email_name"><%= h( @email.name ) %></div>

$('#email_name').editable( <%= email_path(@email).to_json %>, {
  name: 'email[name]',
  method: 'PUT',
  submitdata: {
    authenticity_token: <%= form_authenticity_token.to_json %>,
    wants: 'name'
  }
});

Контроллер:

def update
  @email = Email.find( params[:id] )
  @email.update_attributes!( params[:email )
  respond_to do |format|
    format.js
  end
end

update.js.erb

<%=
    case params[:wants]
    when 'name' then h( @email.name )
    # add other attributes if you have more inline forms for this model
    else ''
    end
%>

Это немного неуклюже с этим оператором switch. Было бы хорошо, если бы JEditable просто сохранил отправленное значение по умолчанию, если запрос ajax был успешным и ничего не было возвращено.

5 голосов
/ 03 ноября 2008

Извините, что поднял этот вопрос только сейчас, но я просто нашел время, чтобы снова заглянуть в мой код. Я думаю, что я решил свою проблему с помощью следующего javascript (мой application.js внутри rails):

jQuery(document).ready(function($) {

$(".edit_textfield").each( function(i) {
  $(this).editable("update", {
         type      : 'textarea',
         rows      : 8,
         name : $(this).attr('name'),
         cancel    : 'Cancel',
         submit    : 'OK',
         indicator : "<img src='../images/spinner.gif' />",
         tooltip   : 'Double-click to edit...'
     })
 });
});

Это работает, если URL вашего контроллера находятся в состоянии RESTful.

1 голос
/ 03 ноября 2008

Если вы включаете файлы .js в html, то нет, но если у вас есть встроенный js в шаблоне представления, тогда да, вы можете.

Вы также можете иметь файлы .erb.js, которые являются представлениями js.

Возможно все: D

0 голосов
/ 19 мая 2009

Если вы контроллеры, немного меньше, чем успокаиваете. В частности, если у вас есть действие по обновлению определенного поля, это также работает. Ключ передает токен аутентификации.

index.html.erb

<span id="my_edit"><%= foo.bar %></span>

<script type="text/javascript">
  $(document).ready(function() {
    $("#my_edit").editable('<%= url_for(:action => "update_bar", 
                  :id => foo) %>',
                    {
                       method: 'PUT',
                       cancel    : 'Cancel',
                       submit    : 'OK',
                       indicator : "<img src='../images/spinner.gif' />",
                       tooltip   : 'Double-click to edit...',
                       submitdata: {
                         authenticity_token: <%= form_authenticity_token.to_json %>,
                       }
                     }
    });
</script>

Упрощенный контроллер, который не оправдывает отсутствие успокоения:

foo_controller.rb

def update_bar
    foo = Foo.find(params[:id])
    bar= params[:value]
            // insert justifiable code here
    foo.save
    render :text=>params[:value]
end

(Работает с Rails 2.2.2 и 2.3.2 с Jeditable 1.7.0 и jRails 0.4, хотя jRails здесь не играет большой роли, кроме предоставления включений для jQuery 1.5)

0 голосов
/ 03 ноября 2008

Я не уверен, что полностью понимаю проблему, с которой вы столкнулись, но я думаю, что вы могли бы добавить что-то подобное в свой javascript:

<%= url_for(@post) %>

Это зависит от того, как вы структурируете свой javascript, как вы организовали свои файлы и т. Д. ...

...