link_to语法与rails 3(link_to_remote)和基本的javascript无法在rails 3应用程序中运行?

时间:2010-03-16 23:10:57

标签: javascript ruby-on-rails-3 link-to

我想知道当前的rails3 master中是否完全破坏了基本的link_to语法,或者我是否在这里做了一些错误的语法。

= link_to "name", nil, :onlick => "alert('Hello world!');"

实际上应该在点击时产生警报。非常简单。不适用于我的rails3项目! (也没有错误输出!)任何想法?

对于一般的link_to语法,我找不到一个例子,我可以将link_to_remote与确认,远程和html类结合起来(参见下面的尝试)

= link_to "delete", {:action => "destroy", :remote => true, :method => :delete, :confirm => "#{a.title} wirklich Löschen?" }, :class => "trash"

即使是rails3 api也无法帮助我:http://rails3api.s3.amazonaws.com/index.html

帮助!

6 个答案:

答案 0 :(得分:13)

我相信你的问题在于你设置链接以在被舔时显示警报,而不是点击时。 ;)

对于link_to_remote,它已经改变,转而使用不引人注目的javascript。您可以在此处阅读:http://blog.solnic.eu/2009/09/08/unobtrusive-javascript-helpers-in-rails-3.html

答案 1 :(得分:8)

好吧,看起来新的不引人注目的javascript更改引入了这个问题。 如果遇到类似问题,请参阅以下帖子以获取更多信息 http://blog.loopedstrange.com/modest-rubyist-archive/rails-3-ujs-and-csrf-meta-tags

 <%= csrf_meta_tag %>

为我修好了东西。

答案 2 :(得分:3)

nil不起作用:

= link_to "name", nil, :onclick => "alert('Hello world!');"
=> <a href="/currentpath", onclick="alert('Hello world!');">name</a>

您应该使用:

= link_to "name", "#", :onclick => "alert('Hello world!');"
=> <a href="#", onclick="alert('Hello world!');">name</a>

答案 3 :(得分:1)

如果这里没有其他答案对您有用,那么这可能会有所帮助。

所以csrf_meta_tag声明对我来说还不够,但无论如何都应该在你的Rails 3的布局文件中添加。有了我,结果证明是与jQuery的冲突。我只想说:

<script type="text/javascript">
  jQuery.noConflict();
</script>

在我的布局中使用rails脚本标记并解决了Prototype和jQuery之间的冲突。嘿presto我在删除时收到确认对话框。

使用link_to尝试删除记录时,此技术也解决了我的原始问题。使用link_to任何destroy命令似乎都会重定向到记录的show页面。因此我根据我看到的其他解决方案移动到button_to,但没有确认。我想知道jQuery和Prototype是否存在一些更深层次的问题。

这一切都发生在升级的Rails 2.3.5应用程序上,似乎工作正常,无需在我的布局文件中包含Prototype或:defaults。

在旁注上我确实按照这些说明操作:

http://webtech.union.rpi.edu/blog/2010/02/21/jquery-and-rails-3/

尝试为这个项目一起丢失Prototype,并使用jQuery git子模块代替Rails 3。按照这些说明不起作用,当使用link_to时,我仍然没有使用button_to和显示页面确认对话框。我以为我会提到它,所以省去了尝试这个的麻烦。

答案 4 :(得分:1)

上述答案的偏离主题评论,因为我无法发表评论:(

@robeastham: 我想我会留下一些可能有助于解决你所遇到的一些问题的评论。

自从从ActiveRecord切换到Mongoid以来,我一直在使用“销毁链接重定向到显示页面而不是索引页面”,并且没有找到真正的解决方案(已经删除了原型)。但是,干净利落的解决方法是使用以下位置明确指定重定向路径:location to respond_with:

respond_with @themodel, :location => themodels_url

至于使用按钮获取确认弹出窗口,您可以执行以下操作:

button_to "Button Name", { :controller => "your/controller", :action => :action_name, :confirm => "Text for the pop-up"}, { :method => :<method name> }

e.g。

button_to "Click Here", { :controller => "home", :action -> :set_completed, :confirm => "Mark the item complete?" }, { :method => :put }

答案 5 :(得分:0)

这对我有用:

<%= link_to "Recommend", recommend_user_path(@user), :remote => true %>

检查它是否在views \ layout \ application.html.erb(或等效文件)中:

<%= csrf_meta_tags %>

请注意,Rails v3.2.2使用“标签”而非“标签”