Ruby on rails 如何将普通Ruby对象与url帮助器一起使用

Ruby on rails 如何将普通Ruby对象与url帮助器一起使用,ruby-on-rails,ruby,Ruby On Rails,Ruby,我正在从一个简单的自定义模型(不是ActiveRecord,纯ActiveModel)呈现一个页面,我无法让url/路径帮助程序生成一个带有id的url,如下所示: person_path(model) # I want: /person/3 # I get: /person 是否有我必须继承或实现的具体类,以便url帮助程序与我的自定义模型一起工作 我听说了to_param的,但它不起作用,至少在以下情况下不起作用: class Person include ActiveMode

我正在从一个简单的自定义模型(不是ActiveRecord,纯ActiveModel)呈现一个页面,我无法让url/路径帮助程序生成一个带有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
根据这项工作:

任何包含ActiveModel::Model的类都可以与表单_一起使用, render和任何其他动作视图辅助方法,就像Active一样 记录对象


但是我想url帮助程序仍然需要一个缺少的函数才能工作

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

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

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

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

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


再次检查你的路线。我想您可能已经将路由定义为一个单一的资源
resource:person
,它不会向url添加ID。

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


再次检查你的路线。我想您可能已经将路由定义为一个单一的资源
resource:person
,它不会向url添加ID。

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


再次检查你的路线。我想您可能已经将路由定义为一个单一的资源
resource:person
,它不会向url添加ID。

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



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

定义为_param
应该有效。你是如何尝试实现这个方法的?不,这就是我在问题中提到的。但我刚刚添加了一个小示例,说明我希望
to_param
如何工作。代码是正确的,应该可以工作。请检查您的
routes.rb
文件中是否有
resources:people
-我复制了您发布的确切型号代码,并且
person\u path(person.new)
获取了我的
/people/3
,而不仅仅是“/people”将
定义为
。你是如何尝试实现这个方法的?不,这就是我在问题中提到的。但我刚刚添加了一个小示例,说明我希望
to_param
如何工作。代码是正确的,应该可以工作。请检查您的
routes.rb
文件中是否有
resources:people
-我复制了您发布的确切型号代码,并且
person\u path(person.new)
获取了我的
/people/3
,而不仅仅是“/people”将
定义为
。你是如何尝试实现这个方法的?不,这就是我在问题中提到的。但我刚刚添加了一个小示例,说明我希望
to_param
如何工作。代码是正确的,应该可以工作。请检查您的
routes.rb
文件中是否有
resources:people
-我复制了您发布的确切型号代码,并且
person\u path(person.new)
获取了我的
/people/3
,而不仅仅是“/people”将
定义为
。你是如何尝试实现这个方法的?不,这就是我在问题中提到的。但我刚刚添加了一个小示例,说明我希望
to_param
如何工作。代码是正确的,应该可以工作。请检查您的
routes.rb
文件中是否有
resources:people
-我复制了您发布的确切型号代码,并且
person\u path(person.new)
获取了我的
/people/3
,而不仅仅是“/people”argghhh!我知道那些路线看起来有些不同。。。他们都错过了(:id)部分argghhh!我知道那些路线看起来有些不同。。。他们都错过了(:id)部分argghhh!我知道那些路线看起来有些不同。。。他们都错过了(:id)部分argghhh!我知道那些路线看起来有些不同。。。他们都错过了(:id)部分谢谢!花了大约一个小时寻找解释,没有人指出持续性?
很重要,或者应该在什么时候使用。谢谢!花了大约一个小时寻找解释,没有人指出持续性?
很重要,或者应该在什么时候使用。谢谢!花了大约一个小时寻找解释,没有人指出持续性?很重要,或者应该在什么时候使用。谢谢!花了大约一个小时寻找解释,没有人指出持续性?很重要,或者应该在什么时候使用它。