【问题标题】:link_to syntax with rails3 (link_to_remote) and basic javascript not working in a rails3 app?使用 rails3 (link_to_remote) 和基本 javascript 的 link_to 语法在 rails3 应用程序中不起作用?
【发布时间】:2010-03-16 23:10:57
【问题描述】:

我想知道当前的 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

帮助!

【问题讨论】:

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


    【解决方案1】:

    我相信您的问题是您已将链接设置为在被舔时显示警报,而不是在被点击时显示警报。 ;)

    至于link_to_remote,它随着切换到不显眼的javascript而改变。你可以在这里阅读:http://blog.solnic.eu/2009/09/08/unobtrusive-javascript-helpers-in-rails-3.html

    【讨论】:

    • 呵呵,谢谢你的错字提示。不幸的是,这不是问题,但新的不显眼的 javascript 助手需要包含元标记。谢谢你的指点! ;)
    【解决方案2】:

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

     <%= csrf_meta_tag %>
    

    为我解决了问题。

    【讨论】:

    • 谢谢,simianarmy - 我刚刚更新了存档内容工作版本的链接。
    【解决方案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>
    

    【讨论】:

      【解决方案4】:

      如果这里的其他答案都不适合您,那么也许这会有所帮助。

      所以 csrf_meta_tag 声明对我来说还不够,尽管无论如何都应该在 Rails 3 的布局文件中添加。在我看来,这与 jQuery 发生了冲突。我只是把这个:

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

      在我的布局中的 rails scripts 标记之后,Prototype 和 jQuery 之间的冲突得到解决。嘿,我在删除时收到确认对话框。

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

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

      在旁注中,我确实遵循了这些说明:

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

      尝试在这个项目中完全放弃 Prototype,并改用 Rails 3 的 jQuery git 子模块。遵循这些说明不起作用,使用 link_to 时,我仍然没有使用 button_to 和显示页面确认对话框。只是想我会提到它,这样就省去了尝试这个的麻烦。

      【讨论】:

      【解决方案5】:

      因为我还不能评论,所以上面的答案的题外话评论:(

      @robeastham: 我想我会留下一些可能有助于解决您遇到的一些问题的 cmets。

      自从从 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> }
      

      例如

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

      【讨论】:

        【解决方案6】:

        这对我有用:

        &lt;%= link_to "Recommend", recommend_user_path(@user), :remote =&gt; true %&gt;

        检查这是否在您的视图\布局\application.html.erb(或等效项)中:

        &lt;%= csrf_meta_tags %&gt;

        注意 Rails v3.2.2 使用“标签”而不是“标签”

        【讨论】:

          猜你喜欢
          • 2011-10-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-08-21
          相关资源
          最近更新 更多