重写令人讨厌的Ruby语法

时间:2013-05-09 07:50:42

标签: ruby ruby-on-rails-3

有人可以帮我简化我写的这行吗?除了丑陋的语法之外,我确定还有其他方法,除了eval以形成路径

return send("link_to", "(#{order_string[:direction]})" 
         ,eval("#{controller}_path(#{query_string})"))

保证

controller               = contacts
query_string             = 'status: "ASC"'
order_string[:direction] = "ASC"

上述行应该导致(并且确实如此)

link_to "ASC",contacts_path(status: "ASC")

2 个答案:

答案 0 :(得分:2)

在辅助方法中你应该能够做到:

return link_to(order_string[:direction], 
               send("#{controller}_path", query_string))

根据您的参数,这相当于:

return link_to('ASC', contacts_path(status: 'ASC'))

答案 1 :(得分:2)

为了避免使用Eval,我会简化link_to,而不是使用routes方法。

return link_to order_string[:direction],
               controller: controller, query_string

它将转换为

return link_to 'ASC', controller: "contacts", status: 'ASC'

和HTML

<a href="/contacts?status=ASC">ASC</a>

此外,除了控制器之外,您还可以添加actionid,而Rails足够聪明,可以完成剩下的工作。