Rails AJAX 远程:true 与动态 id

Posted

技术标签:

【中文标题】Rails AJAX 远程:true 与动态 id【英文标题】:Rails AJAX remote: true with dynamic id 【发布时间】:2017-02-17 07:03:32 【问题描述】:

我在 Rails 中实现了一个基本的 AJAX 调用,它可以正常工作:

index.html.erb

<a href="/days/new" data-remote="true" id="new_day_ajax">Add This day</a>

new.js.erb

$('#new_day_ajax').hide().after('<%= j render("form")%>');

问题是我在单个页面上生成了多达 31 个与上述类似的 a-tags,并且表单当然会始终显示在第一个页面上,无论我点击哪个链接:

end_date.downto(start_date).each do |date|
    [...]

为了使表单显示在点击的链接上,我尝试像这样动态生成 id:

id="new_day_ajax_<%= date.strftime('%d') %>" <!-- i.e. new_day_ajax_07 -->

但现在我不知道如何将这个动态 id 传递给 new.js.erb。我怎么知道javascript里面的动态id?

提前致谢!

【问题讨论】:

【参考方案1】:

您可以传递GET参数并从.erb视图中的params对象获取它

index.html.erb

<a href="/days/new?date=<%= date.strftime('%Y-%m-%d') %>" 
    data-remote="true"
    id="new_day_ajax_<%= date.strftime('%Y-%m-%d') %>">Add This day</a>

例如:

<a href="/days/new?date=2016-10-08" 
    data-remote="true"
    id="new_day_ajax_2016-10-08">Add This day</a>

new.js.erb

$('#new_day_ajax_<%= params[:date] %>').hide().after('<%= j render("form")%>');

【讨论】:

以上是关于Rails AJAX 远程:true 与动态 id的主要内容,如果未能解决你的问题,请参考以下文章

文档准备好后通过 Ajax 加载的 Rails 远程表单未提交

替换 DOM 元素上的 Rails Ajax 事件

Rails ajax 响应和 DELETE 方法

Rails 4 使用 ajax、jquery、:remote => true 和 respond_to 渲染部分

使用 ajax 刷新页面时,Ruby on Rails 失败

Rails:使用 ajax 填充引导下拉列表