覆盖ActiveScaffold中的show / edit / etc行为

时间:2010-10-12 02:19:38

标签: ruby-on-rails activescaffold

我目前有一个由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放在字段中,但它不是我想要的那个 - 再次,长篇故事...... :(

1 个答案:

答案 0 :(得分:1)

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

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

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