将 Rails 参数哈希传递到命名路由的更有效方法
我需要一种更有效的方法将参数哈希传递到命名路由,包括添加/删除/修改键/值对的能力。
添加键(:company 符号),同时保留 params 哈希的其余部分(手动指定每个符号/值):
# adds the company filter
link_to_unless params[:company]==company, company, jobs_path(:company=>company, :posted=>params[:posted],:sort=>params[:sort],:dir=>params[:dir])
删除键(消除 :company 符号),同时保留 params 哈希的其余部分(手动指定每个符号/值):
# create a link that removes the company filter
link_to_unless_current 'x', jobs_path(:posted=>params[:posted],:sort=>params[:sort],:dir=>params[:dir])
我想直接传递参数哈希,但这会引发异常:
link_to_unless params[:company]==company, company, jobs_path( params )
我希望有一些 DRYer 替代方案。
I need a more-efficient way to pass the params hash to a named route, including the ability to add/remove/modify a key/value pair.
Adding a key (the :company symbol), while preserving the remainder of the params hash (manually specify each symbol/value):
# adds the company filter
link_to_unless params[:company]==company, company, jobs_path(:company=>company, :posted=>params[:posted],:sort=>params[:sort],:dir=>params[:dir])
Removing a key (eliminates the :company symbol), while preserving the remainder of the params hash (manually specify each symbol/value):
# create a link that removes the company filter
link_to_unless_current 'x', jobs_path(:posted=>params[:posted],:sort=>params[:sort],:dir=>params[:dir])
I thought of just passing the params hash directly, but that throws an exception:
link_to_unless params[:company]==company, company, jobs_path( params )
I'm hoping for some DRYer alternatives.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
重构辅助函数:
重构视图代码以传递哈希而不是键/值对;更大的灵活性:
和
Refactored the helper function:
Refactored the view code to pass hash instead of key/value pair; greater flexibility:
and
这种方法有效,但似乎不是最佳的:
helper:
view:
似乎我应该能够直接使用 params 哈希,但这现在可以工作。
This approach works, but doesn't seem optimal:
helper:
view:
It seems like I should be able to work with the params hash directly, but this will work for now.
重构版本。将其放入目标控制器中,这样它就不会是全局的:
Refactored version. Put this in the target controller so it won't be global: