2010-12-07 66 views
26

当如何,我们通过额外PARAMS除了ID的Rails 3 UJS:使用的link_to

#we want to pass in additional params as well 
<%= link_to "bleh", like_path(answer), :add_param=>2 , :remote=>"true" ,:method=>:post %> 

回答

34

您可以通过在路径功能参数作为URL的一部分传递PARAMS。例如:

<%= link_to "bleh", 
    like_path(:answer_id => 123, :add_param => 2), 
    :remote=> true , :method=> :post %> 

# would result in something like 
# yourapp.com/like/aswer/3?add_param=2 

但我认为在这种情况下,您需要远离纯粹基于资源的路径助手。检查documentation的想法。

24

如果你不想把参数到路径帮手 - 也许是因为有很多人或者你不知道他们在生成页面的时候 - 你也可以把它们放进data-params属性。

例如:

link_to "Add to cart", cart_path, 
    data: { method: :post, remote: true, params: { product_id: 123 }.to_param } 

生成的HTML看起来像这样:

<a data-params="product_id=123" data-remote="true" data-method="post" 
    href="/cart" rel="nofollow">Add to cart</a> 

jQuery的UJS处理机附着一切从data-params属性到POST请求体。

从概念上讲,首先使用路径帮助程序没有多大区别,但是如果要在Javascript中修改参数,此解决方案可能会产生更优雅的代码。

+1

很好的答案!我正在寻找这样的东西。我知道Rails魔术师也会为此做些什么。你在哪里找到这个? – Jashwant 2013-12-20 08:05:52