【问题标题】:How to use plain Ruby object with url helpers如何使用带有 url 助手的普通 Ruby 对象
【发布时间】:2015-02-12 20:46:29
【问题描述】:

我正在从一个简单的自定义模型(不是 ActiveRecord,普通 ActiveModel)渲染一个页面,我无法让 url/path 助手生成一个带有其 id 的 url,如下所示:

person_path(model)
# I want: /person/3
# I get: /person

是否有任何具体的类我必须继承或实现,以便 url 帮助程序与我的自定义模型一起使用?

我听说过to_param,但它不起作用,至少不是这样:

  class Person
    include ActiveModel::Model 

    def id
      3
    end

    def to_param
      id.to_s
    end
  end

根据the documentation 应该可以:

任何包含 ActiveModel::Model 的类都可以与 form_for 一起使用, render 和任何其他 Action View 辅助方法,就像 Active 记录对象。

但我想 url 帮助程序仍然需要一个缺失的函数来工作

【问题讨论】:

  • 定义to_param 应该可以工作。您是如何尝试实现该方法的?
  • 不,这就是我在问题中提到的。但我刚刚添加了一个小样本,说明我期望 to_param 的工作方式
  • 代码正确,应该可以。请检查您的routes.rb 文件中是否有resources :people - 我复制了您发布的确切型号代码,person_path(Person.new) 得到我/people/3,而不仅仅是'/people'

标签: ruby-on-rails ruby


【解决方案1】:

你需要定义一个返回truepersisted?方法:默认实现总是返回false,这会导致rails生成一个没有id的路径。

【讨论】:

  • 谢谢!花了大约一个小时寻找解释,没有人指出persistent? 很重要,或者什么时候应该使用它。
【解决方案2】:

如果您可以分享config/routes.rb 的代码或至少rake routes 的结果,那就太好了。

再次仔细检查您的路线。我认为您可能已将路由定义为单一资源resource :person,它不会在 url 中添加 ID。

【讨论】:

  • 啊!我知道这些路线看起来有些不同……它们都缺少 (:id) 部分
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-16
  • 1970-01-01
  • 1970-01-01
  • 2019-02-16
  • 1970-01-01
  • 2018-04-12
相关资源
最近更新 更多