【问题标题】::with clause preventing action from getting executed in link_to_remote call:with 子句阻止在 link_to_remote 调用中执行操作
【发布时间】:2010-05-27 08:55:18
【问题描述】:

我在以下代码中遇到了 :with 子句的问题。

-counter.times do |c|
  -elem = @tags[c]
  #{elem.name}#{link_to_remote image_tag('x.png'), :url => {:controller => 'questions', :action => 'remove_tag_from_cart'}, :with => "'tag_remove=' + #{elem}"}

如果我去掉:with 子句,那么当我点击图片链接时remove_tag_from_cart 就会被执行。但是,我不能对 elem 做任何事情,因为它不会以任何方式传递给 remove_tag_from_cart。

如果我将:with 子句留在其中,那么remove_tag_from_cart 根本不会被执行!

据我了解, :with 应该使我能够在 remove_tag_from_cart 中执行此操作:

def remove_tag_from_cart
  puts params[:tag_remove].name
end

同样,如果我包含 :with 子句,则此方法不会运行。

我想要的只是将elemelem.id 传递给remove_tag_from_cart,以便我可以使用它(查找东西等)。这是(即使用 :with 传递它)最好/正确的方法吗?如果没有,我的替代方案是什么?

【问题讨论】:

  • 请发布您生成的 html 是什么?您想要什么?
  • 嗯,这段代码存在于另一个 Ajax 调用中呈现的部分中,所以我不知道如何查看生成的 html。
  • 问题正如我所说:#{elem.name}#{link_to_remote image_tag('x.png'), :url => {:controller => 'questions', :action => 'remove_tag_from_cart'}, :with => "'tag_remove=' + #{elem}"} 包含 :with 子句并且不执行 remove_tag_from_cart 方法。当我删除 :with 子句时 - 也就是说,当它只是 #{elem.name}#{link_to_remote image_tag('x.png'), :url => {:controller => 'questions', :action => 'remove_tag_from_cart'}} -- remove_tag_from_cart 正确执行。

标签: ruby-on-rails ajax haml


【解决方案1】:

使用firebug跟踪ajax调用,查看生成的html等

:with 选项是(来自docs):

一个 JavaScript 表达式,指定 XMLHttpRequest 的参数。任何 表达式应该返回一个有效的 URL 查询字符串。

例子:

:with => "'name=' + $('name').value"

你在做:with => "'tag_remove=' + #{elem}"

elem 似乎是 ActiveRecord 对象,所以看来您真正想做的是将其 id 与参数一起传递。但是您可以使用普通的 url 参数来完成,而无需使用 javascript 的 :with:

link_to_remote image_tag('x.png'), :url => {:controller => 'questions', :action => 'remove_tag_from_cart', :tag_remove_id => elem.id}

并在控制器中使用

Tag.find(params[:tag_remove_id])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-09
    • 2018-05-25
    • 1970-01-01
    • 2020-10-08
    相关资源
    最近更新 更多