Rails和Ajax - form_remote_tag无法找到我的错误

时间:2010-01-08 08:58:55

标签: ruby-on-rails ajax

在我的网站上,用户可以观看他的个人资料。在他的个人资料中,他可以查看他的数据(即签名)。 现在我希望我的用户能够在观看时编辑这些数据。 所以我在我看来编写了以下内容:

<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

现在,提交表单,put params [:signature]将输出:classform-textareasfsffsfs 其中sfsffsfs是我输入的文本。 重新加载和我的页面并在页面上输出签名(&lt;%= h @ user.signature%&gt;),我得到: “---!map:HashWithIndifferentAccess classform-textarea:sfsffsfs”

为什么我得到这个奇怪的字符串而不仅仅是sfsffsfs(在这种情况下)? 怎么做,在没有页面重新加载的情况下自动更新数据(&lt;%= h @ user.signature%&gt;)?

2 个答案:

答案 0 :(得分:2)

使用text_area_tag获取text_area字段值。在重新加载页面时,div ID不匹配,应该是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 :(得分:1)

看起来你的text_area调用不太正确,看docs它应该是这样的:

text_area(object_name, method, options = {})

所以你的css类被设置为方法,而你应该使用text_area_tag

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

然后应将正确的值(文本区域中的文本)作为您期望的参数提交。