在将条目重新保存到数据库后,为什么我的textarea不能通过Ajax更新?

时间:2012-11-05 20:42:00

标签: ruby-on-rails ruby ajax ruby-on-rails-3 jquery

我正在使用Ajax在Rails中更新一个简单的text_area

的application.js

$("#invoice_project_id").change(function() {
    var value=$(this).val();
    $.get('/invoices/get_recipient', {project_id= : value}  function(response) {
        $('#invoice_recipient').val(response);
    })
});​

get_recipient.js

$('#invoice_recipient').val("<%= @recipient.to_s.gsub!(/\n/, '\n') %>");

invoices_controller.rb

def get_recipient
  project = Project.find(params[:project_id])
  @recipient = project.person.address
end

代码效果很好,并将recipient text_area的值替换为正确的地址,具体取决于在选择菜单中选择的project

问题是它只适用于数据库中已存在的addresses。 (我正在使用Rails Faker gem填充我的数据库。)我在Safari浏览器中手动重新保存 person的{​​{1}}时,text_area当我尝试使用上面的代码时,不会再通过Ajax更新。

这怎么可能?

我已经使用上面的address方法转义换行符了,所以我想不出我能做的其他事情。

有人可以帮忙吗?

...谢谢

1 个答案:

答案 0 :(得分:0)

好的,事实证明地址中的回车导致了麻烦。

只有在浏览器中通过textarea更新地址时才会创建这些回车。上面提到的Faker gem创建了换行符但没有回车符。

我只是在检查控制台上的数据库记录时才看到这一点,因为\r\n字符在我看到的任何其他位置都是不可见的。

所以在我的特定情况下,我只需要删除模型中的回车符,如下所示:

address.gsub!("\r", "")

我无法在任何javascript文件中执行此操作。

只需一行简单的代码,但对我来说有几个小时的工作。所以希望其他人也能从中受益。