【问题标题】:named routes from string with object来自带有对象的字符串的命名路由
【发布时间】:2012-02-20 10:05:51
【问题描述】:

我希望从一个字符串创建一个命名路由并将一个对象传递给它

我正在使用本地“资源”渲染部分

即。 render :partial => "listing", :locals => {:resource => @resource}

在 _listing.html.haml 我使用 self.send 方法

self.send("#{resource.class.to_s.downcase}_path()")

这工作得很好,并创建了名为路由的资源 IE。文章路径()

但是这个路由需要一个在路由中传递的对象 IE。 article_path(文章)

我正在尝试这个

self.send("#{resource.class.to_s.downcase}_path("+resource+")")

并得到错误 无法将文章转换为字符串

有什么建议吗?

【问题讨论】:

  • 经过大量修改后,我发现答案很简单。解决方法是让它以逗号分隔 _listing.html.haml - resource_path = "#{resource.class.to_s.downcase}_path" = link_to resource.title, send(resource_path, resource) 希望这可以帮助任何挣扎于相同问题的人

标签: ruby-on-rails string methods routes


【解决方案1】:

你应该像这样传递参数:

self.send("#{resource.class.to_s.downcase}_path", resource)

【讨论】:

  • @Ben 我没有看到你的评论,很高兴你自己想通了。
  • 我会改用以下内容:self.send("#{resource.class.to_s.underscore}_path", resource) 如果您的课程不止一个单词,例如FooBar -> foo_bar
【解决方案2】:

您可以像这样简化 Jef 的答案(您不需要使用资源):

send("#{controller_name}_path")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-04
    • 1970-01-01
    • 2016-03-06
    • 2017-09-03
    • 2012-04-01
    • 2011-01-16
    • 1970-01-01
    • 2014-10-28
    相关资源
    最近更新 更多