1

我有一个Object没有 ID 列的 Rails 模型。相反,它使用来自其他两个模型的主键元组作为其主键,dependency_id并且user_id.

我想要做的是能够做这样的事情routes.rb

map.resources :object, :primary_key => [:dependency_id, :user_id]

并让它神奇地生成这样的 URL:

/objects/:dependency_id/:user_id
/objects/:dependency_id/:user_id/1
/objects/:dependency_id/:user_id/1/edit

...除了我只是编造的,而且没有这样的语法。

有没有一种方法可以自定义map.resources,这样我就可以获得 RESTful URL,而不必为所有内容创建自定义路由?还是我只是因为不遵守 ID 约定而被搞砸了?

:path_prefix选项看起来有些有希望,但是我仍然需要一种方法来删除idURL 的一部分。如果可能的话,我希望仍然能够使用路径助手。

4

1 回答 1

2

您应该覆盖Object模型的方法to_param以反映您的主键。像这样的东西:

def to_param
  [dependency_id, user_id].join('-')
end

然后,当您为这些对象(如object_path(some_object))设置 url 时,它会自动转换为/objects/5-3. 然后在显示操作中,您必须拆分params[:id]破折号并通过dependency_id和user_id查找对象:

def show
  dep_id, u_id = params[:id].split('-').collect(&:to_i)
  object = Object.find_by_dependency_id_and_user_id(dep_id, u_id)
end

您还可以查看find_by_paramgem for rails

于 2010-06-29T17:35:22.647 回答