首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何动态创建rails link_path?

如何动态创建rails link_path?
EN

Stack Overflow用户
提问于 2014-11-02 06:13:44
回答 2查看 277关注 0票数 0

因此,我有三条路径,我想为以下三条路径生成链接:

代码语言:javascript
复制
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

代码语言:javascript
复制
<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工作:

代码语言:javascript
复制
link_to post.status.try(:upcase), "#{post.status}_path"

它确实产生了HTML "confirmed_path",而不是/confirmed

有什么想法吗?

编辑1

所以我想出了一个解决方案,但我对其他选择很好奇:

代码语言:javascript
复制
link_to post.status.try(:upcase), "#{post.status.html_safe}"

效果很好。

还有别的办法吗?更多的“铁路”方式?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-02 06:59:36

用这个,

代码语言:javascript
复制
link_to post.status.try(:upcase), "#{post.status}_path"

link_to的第二个参数是字符串。实际上,您要做的是调用方法(例如,confirmed_path),它的名称将在字符串插值后确定。

代码语言:javascript
复制
link_to post.status.try(:upcase), send("#{post.status}_path")

此外,由于您的路由映射到相同的操作,您可以定义一个单一的路由,而不是三个。

代码语言:javascript
复制
get '/:status', to: 'posts#status', constraints: { status: /confirmed|unconfirmed|corroborated/ }, as: :status

然后,在你看来,你可以这样做,

代码语言:javascript
复制
<%= link_to post.status.try(:upcase), status_path(status: post.status) %>
票数 2
EN

Stack Overflow用户

发布于 2014-11-02 06:41:23

尝试:link_to post.status.try(:upcase), post.status

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26696583

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档