有人可以帮我简化我写的这行吗?除了丑陋的语法之外,我确定还有其他方法,除了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")
答案 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>
此外,除了控制器之外,您还可以添加action
和id
,而Rails足够聪明,可以完成剩下的工作。