我有一个页面,当单击一个按钮时,我想在rails侧运行一个方法并相应地更新页面:
控制器方法:
def disallow_part_for_augment
disallowed_part = AvailableAugmentsPart.create(part_id: params[:part_id], available_augment_id: params[:id], disallow: true)
disallowed_part.save()
respond_to do |format|
format.html { redirect_to v2_parts_url }
format.js
end
end
Ajax方法:
$ ->
$('#disallow-part').click (e) ->
console.log $(this).attr("href")
e.preventDefault()
$.ajax
url: $(this).attr("href")
type: 'PUT'
//data:
return
调用帮助器方法的部分是我想要更新的部分
<td><%= au.augment.code %></td>
<%= show_part_group_for_allowed_parts(part_group.name, @part.id, au.id) %>
<td><%= part_group.part_category.name %></td>
辅助方法
def show_part_group_for_allowed_parts(part_group_name, part_id, available_augment_id)
html = ""
if AvailableAugmentsPart.is_part_disallowed(part_id, available_augment_id).exists?
html << "<td class='status color-red'>Disallowed</td>"
else
html << "<td>#{part_group_name}</td>"
end
return raw(html)
end
链接到触发事件:
<%= link_to('DISALLOW', "disallow_part_for_augment/#{au.id}", id: 'disallow-part', class: 'btn btn-mini btn-primary', title: 'Disallow', remote: true) %>
答案 0 :(得分:0)
控制器中对format.js
的调用将查找模板disallow_part_for_augment.js.erb
,并将其发送到将在其中执行的浏览器。所以在那里你可以做你需要做的更新页面。
要轻松找到要更新的部分,您需要为其添加一个类或ID(例如在您的助手中):
html << "<td id='part-#{part_id}' class='status color-red'>Disallowed</td>"
所以你可以从disallow_part_for_augment.js.erb
这样引用它:
$("#part-<%= @disallowed_part.part_id %>")
.replaceWith(
"<%= escape_javascript(show_part_group_for_allowed_parts(...)) %>");