我目前有一个由ActiveScaffold生成的通用列表。在列表中每一行的末尾,ActiveScaffold为每条记录添加标准的CRUD链接-显示,编辑,删除。
我不希望对这些操作使用ActiveScaffold(长话短说),而是创建了自己的 Controller 来处理此问题。我试图覆盖这些链接以指向我自己的 Controller ,但我还不太清楚如何传递记录的ID。
例如,假设我希望Show的新链接为 / foo / show / [id] -我的ActiveScaffold配置中包含以下链接:
config.show.link.action = "show"
config.show.link.parameters = {:controller => "foo", :id => ???}
我不知道 id 参数要传递什么。我试过使用:foo_id或foo_id之类的东西,但是 Controller 不知道它们是什么。例如,当我使用:foo_id时,我只得到String- / foo / show / foo_id 。
我的 Controller 在下面,但没有太多。
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放在字段中,但它不是我想要的那个-再次,长话...... :(
最佳答案
好吧,这可能不是最好的解决方案,但它是最明显的。
在我的“编辑:”中,我添加了一个我最初省略的非常重要的细节。 ActiveScaffold会自动将URL中的ID设置为当前记录中的ID,但是我的自定义 Controller 实际上需要一个不同的ID(实际上是记录上的外键)。
解决方案-现在很明显-只是将我的自定义 Controller 更改为使用它传递的默认ID,然后将ActiveRecord查询更改为使用此ID ... d'oh。