Rails и Ajax - form_remote_tag Не могу найти мою ошибку - PullRequest
0 голосов
/ 08 января 2010

На моем сайте пользователь может посмотреть свой профиль. В своем профиле он может просмотреть свои данные (то есть подпись). Теперь я хочу, чтобы мои пользователи могли редактировать эти данные во время просмотра. Итак, я закодировал следующее на мой взгляд:

<div id="profile-signature">
  <p>
    <b>Signature:</b>
    <%=h @user.signature %>
  </p>

  <%= form_remote_tag(:update => "signature",:url => { :action => :update_signature }) %>
  <%= text_area(:signature,:class=>"form-textarea") %>
  <%= submit_tag "Save Signature" %>

</div>

в моем пользовательском контроллере я создал новое действие update_signature

  def update_signature
    puts 'in function!'
    @user = current_user
    puts @user.login
    puts params[:signature]
    @user.signature = params[:signature]
    @user.save
    puts 'saved'
  end

Теперь, отправляя форму, помещает params [: signature], будет выводить: classform-textareasfsffsfs где sfsffsfs - текст, который я ввел. Перезагружая и мою страницу и выводя подпись на страницу (<% = h @ user.signature%>), я получаю: "---! map: HashWithIndifferentAccess classform-textarea: sfsffsfs"

Почему я получаю эту странную строку вместо просто sfsffsfs (в данном случае)? Что делать, чтобы обновить данные (<% = h @ user.signature%>) автоматически без перезагрузки страницы?

Ответы [ 2 ]

2 голосов
/ 08 января 2010

Используйте text_area_tag для получения значений поля text_area. При перезагрузке страницы происходит несоответствие идентификатору div, оно должно быть signature, а не profile-signature.

<div id="profile-signature">
  <p>
    <b>Signature:</b>
    <%=h @user.signature %>
  </p>

  <%= form_remote_tag(:update => "signature",:url => { :action => :update_signature }) %>
  <%= text_area(:signature,:class=>"form-textarea") %>
  <%= submit_tag "Save Signature" %>

</div>

Внести следующие изменения

 <div id="signature">
      <p>
        <b>Signature:</b>
        <%=h @user.signature %>
      </p>

      <%= form_remote_tag(:update => "signature",:url => { :action => :update_signature }) %>
      <%= text_area_tag(:signature,:class=>"form-textarea") %>
      <%= submit_tag "Save Signature" %>

    </div>

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

1 голос
/ 08 января 2010

Похоже, что ваш вызов text_area не совсем правильный, если смотреть на документы , это должно быть так:

text_area(object_name, method, options = {})

так что ваш класс css устанавливается как метод, вместо этого вы должны использовать text_area_tag:

<%= text_area_tag(:signature, @user.signature, :class=>"form-textarea") %>

Тогда правильное значение (текст в текстовой области) должно быть представлено как ожидаемые параметры.

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