:with子句阻止在link_to_remote调用中执行操作

时间:2010-05-27 08:55:18

标签: ruby-on-rails ajax haml

我遇到以下代码中的: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根本不会被执行!

根据我的理解,:我应该允许我在remove_tag_from_cart中执行此操作:

def remove_tag_from_cart
  puts params[:tag_remove].name
end

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

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

1 个答案:

答案 0 :(得分:1)

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

:with选项(来自docs):

  

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

     

示例:

     

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

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

elem似乎是ActiveRecord对象,所以看起来你真正想要做的就是用params传递它的id。但你可以使用普通的网址参数,而不使用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])