0

我正在使用 Rails 的敏捷 Web 开发进入 Ruby on Rails。

我到了你使用的部分:

<%= link_to (image_tag(product.image_url), {:action => :add_to_cart, :id => product}, :method => :post) %>

为了尝试 RESTful,Rails 在每个锚标记上踢掉了这个内联 Javascript

onclick="var f = document.createElement('form'); f.style.display = 'none'; this.parentNode.appendChild(f); f.method = 'POST'; f.action = this.href;var s = document.createElement('input'); s.setAttribute('type', 'hidden'); s.setAttribute('name', 'authenticity_token'); s.setAttribute('value', 'gegcVQGk3yN/q+SjZehByuyAHiqh5BSZWa4QHZb8DOU='); f.appendChild(s);f.submit();return false;"

现在,我倾向于从不使用:method => :post,而是编写一些 Prototype JS 之类的东西:

$$('div.entry a').observe('click', postAnchor);

function postAnchor(event) {
    // create a form around the anchor
    // submit the form with the right product id
}

有没有办法让我的蛋糕也吃掉?在链接上使用:method => :post,但 Rails 是否会像上面那样踢出一小块 JS?

或者如果你使用:method => :post,你必须忽略 gobbledy gook?

4

1 回答 1

1

有一段 Javascript 使得它很难移出。这就是这里的部​​分。

s.setAttribute('name', 'authenticity_token'); s.setAttribute('value', 'gegcVQGk3yN/q+SjZehByuyAHiqh5BSZWa4QHZb8DOU=');

真实性令牌用于防止 CSRF 攻击。有一些解决方法,但我更喜欢只使用内联 javascript。

也就是说,Rails 3 不会使用内联 javascript,而是不显眼。它通过将变量(例如真实性令牌)分配给 HTML 5 标记属性并使用 Javascript 对其进行解析来实现这一点。

于 2009-08-17T21:15:06.207 回答