Rails下拉菜单中link_to按钮显示路径而非文本、URL异常问题
问题根因
异常是Ruby代码解析优先级和Rails link_to 块调用规则共同导致的:
- 不带块的
link_to参数规则为link_to(显示文本, 路径, HTML选项),你之前的参考代码符合这个规则所以运行正常 - 带块自定义内部内容的
link_to参数规则为link_to(路径, HTML选项) do 自定义内容 end,你没有用括号明确参数边界,同时将if article.post.present?判断直接写在do关键字前,导致Ruby解析时错误将class参数识别为路径的查询参数,块内容也没有正确绑定到link_to方法,最终出现显示路径文本、跳转地址异常的问题。
修复方案
写法1(推荐,逻辑更清晰)
将存在性判断移到外部包裹整个link_to逻辑:
<% if article.post.present? %> <%= link_to edit_profile_post_path(article.profile, article.post), class: "dropdown-item" do %> <div class="flex"> <div class="w-5 mr-2 flex items-center justify-center"> <i class="text-inherit fal icon-sm fa-pen" aria-hidden="true"></i> </div> Edit Post </div> <% end %> <% end %>
写法2(保留行内判断)
用括号明确link_to的参数边界即可:
<%= link_to(edit_profile_post_path(article.profile, article.post), class: "dropdown-item") if article.post.present? do %> <div class="flex"> <div class="w-5 mr-2 flex items-center justify-center"> <i class="text-inherit fal icon-sm fa-pen" aria-hidden="true"></i> </div> Edit Post </div> <% end %>
额外提示
原代码使用的fa-trash-alt是删除类图标,编辑功能建议替换为fa-pen类的编辑图标,避免用户操作误解。
内容的提问来源于stack exchange,提问作者Gerard
相关产品推荐
相关产品推荐

