我正在使用this教程,并开发了一个名为ponies的简单应用程序
这就是我在视图页面中的内容,
<% @ponies.each do |pony| %>
<tr>
<td><%= link_to 'Destroy', pony, method: :delete, data: { confirm: 'Are you sure?' }, :remote => true, :class => 'delete_pony' %> </td>
</tr>
<% end %>
并在控制器中:
def destroy
@pony = Pony.find(params[:id])
@pony.destroy
respond_to do |format|
format.html { redirect_to ponies_url }
format.json { head :no_content }
format.js { render :layout => false }
end
end
很明显当我点击链接Destroy时,脚本'destroy.js.erb'文件被执行
alert("in destroy.js.erb");
$('.delete_pony').bind('ajax:success', function() {
alert("in destroy.js.erb inside ajax success");
$(this).closest('tr').fadeOut();
})
并成功删除了小马对象
但我创建了一个额外的链接
<td><%= link_to 'hussi', pony , method: :post, data: { confirm: 'Are you sure?' }, :remote => true, :class => 'preview_pony' %></td>
在控制器中创建预览方法
def preview
@pony = Pony.find(params[:id])
@hussi = @pony.name
puts @hussi
respond_to do |format|
format.html { redirect_to ponies_url }
format.json { head :no_content }
format.js { render :layout => false }
end
end
还创建了文件'preview.js.erb'
alert("in preview.js.erb");
$('.preview_pony').bind('ajax:success', function()
{
alert("you did it , hussain");
})
但点击elink预览时,“preview.js.erb”内写的脚本永远不会被调用,任何解释为什么?
也在第一个链接中 我们使用HTTP方法:删除
现在,如果我想简单地显示一些simeple方法或淡入/淡出一些html元素,我应该使用什么http方法
在该行:
<%= link_to 'hussi', pony , method: :post, data: { confirm: 'Are you sure?' }, :remote => true, :class => 'preview_pony' %>
我应该通过什么对象代替'小马' 我应该使用什么方法代替':delete'方法
答案 0 :(得分:1)
我认为您必须定义要在控制器中调用的女巫动作:
<%= link_to 'hussi', {:action => "preview"}, method: :post, data: { confirm: 'Are you sure?' }, :remote => true, :class => 'preview_pony' %>
并记住将路线添加到routes.rb
文件中的操作,例如
post 'ponies/preview'
此外,作为附注,我建议您查看pry gem。你基本上添加
group :development do
gem 'pry'
gem 'pry-rails'
gem 'pry-debugger'
gem 'pry-stack_explorer'
end
到Gemfile
,运行bundle install
,(可能重启服务器),您可以在代码中调用binding.pry
作为断点。
答案 1 :(得分:0)
如果你正在通过ajax创建预览链接。然后那可能会破裂。尝试使用on('ajax:success',...