因此,我有三条路径,我想为以下三条路径生成链接:
confirmed_path GET /confirmed(.:format) posts#status {:status=>"confirmed"}
unconfirmed_path GET /unconfirmed(.:format) posts#status {:status=>"unconfirmed"}
corroborated_path GET /corroborated(.:format) posts#status {:status=>"corroborated"}在我看来,我正在呈现具有以下链接的相关span:
<span class="post-status status label<%=render partial: "shared/color", locals: {post: post.status }%>"><%= link_to post.status.try(:upcase), "#" %></span>我想要发生的是,如果不使用link_to的if/case link_to路径部分,如果post.status ==“确认”,我希望它生成confirmed_path。
当我尝试这样做时,我不太清楚如何使字符串插值为这种类型的problem...beause工作:
link_to post.status.try(:upcase), "#{post.status}_path"它确实产生了HTML "confirmed_path",而不是/confirmed。
有什么想法吗?
编辑1
所以我想出了一个解决方案,但我对其他选择很好奇:
link_to post.status.try(:upcase), "#{post.status.html_safe}"效果很好。
还有别的办法吗?更多的“铁路”方式?
发布于 2014-11-02 06:59:36
用这个,
link_to post.status.try(:upcase), "#{post.status}_path"link_to的第二个参数是字符串。实际上,您要做的是调用方法(例如,confirmed_path),它的名称将在字符串插值后确定。
link_to post.status.try(:upcase), send("#{post.status}_path")此外,由于您的路由映射到相同的操作,您可以定义一个单一的路由,而不是三个。
get '/:status', to: 'posts#status', constraints: { status: /confirmed|unconfirmed|corroborated/ }, as: :status然后,在你看来,你可以这样做,
<%= link_to post.status.try(:upcase), status_path(status: post.status) %>发布于 2014-11-02 06:41:23
尝试:link_to post.status.try(:upcase), post.status
https://stackoverflow.com/questions/26696583
复制相似问题