3

我目前有一个由 ActiveScaffold 生成的通用列表。在列表中每一行的末尾,ActiveScaffold 为每条记录添加标准 CRUD 链接 - 显示、编辑、删除。

我不希望将 ActiveScaffold 用于这些操作(长篇大论),并创建了我自己的控制器来处理这个问题。我试图覆盖这些链接以指向我自己的控制器,但我无法弄清楚如何通过记录的 ID。

例如,假设我希望 Show 的新链接是/foo/show/[id] - 我的 ActiveScaffold 配置中有这个:

config.show.link.action = "show"
config.show.link.parameters = {:controller => "foo", :id => ???}

我不知道在id参数中要传递什么。我尝试过使用 :foo_id 或 foo_id 之类的东西,但控制器不知道它们是什么。例如,当我使用 :foo_id 时,我只得到字符串 - /foo/show/foo_id

我的控制器在下面,但没有太多内容。

class MessagesController < ApplicationController

    active_scaffold :messages do |config|

        config.columns = [:eff_date, :exp_date, :type, :message]

        config.show.link.action = "show"
        config.show.link.parameters = {:controller => "show_messages", :id => ??}

    end

end

我想继续使用 ActiveScaffold 作为列表屏幕,因为我真的不想滚动我自己的列表版本。我发现一个人在 googlegroups 中问同样的问题,但没有任何回应。

http://www.mail-archive.com/activescaffold@googlegroups.com/msg00798.html

编辑:我应该补充一点,不指定 :id 参数实际上确实将默认的 ActiveRecord ID 放在字段中,但它不是我想要的 - 再说一遍,长篇大论...... :(

4

1 回答 1

1

好吧,这可能不是最好的解决方案,但它是最明显的。

在我的“编辑:”中,我添加了一个我最初省略的非常重要的细节。ActiveScaffold 自动将 URL 中的 ID 设置为来自当前记录的 ID,但是我的自定义控制器实际上需要不同的 ID(实际上是记录上的外键)。

解决方案 - 现在很明显 - 只是将我的自定义控制器更改为使用它传递的默认 ID,并将 ActiveRecord 查询更改为使用此 ID...d'oh。

于 2010-10-12T02:39:19.480 回答