我正在使用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
方法转义换行符了,所以我想不出我能做的其他事情。
有人可以帮忙吗?
...谢谢
答案 0 :(得分:0)
好的,事实证明地址中的回车导致了麻烦。
只有在浏览器中通过textarea
更新地址时才会创建这些回车。上面提到的Faker gem创建了换行符但没有回车符。
我只是在检查控制台上的数据库记录时才看到这一点,因为\r
和\n
字符在我看到的任何其他位置都是不可见的。
所以在我的特定情况下,我只需要删除模型中的回车符,如下所示:
address.gsub!("\r", "")
我无法在任何javascript文件中执行此操作。
只需一行简单的代码,但对我来说有几个小时的工作。所以希望其他人也能从中受益。