Переопределение поведения show / edit / etc в ActiveScaffold - PullRequest
3 голосов
/ 12 октября 2010

В настоящее время у меня есть общий список, который генерируется ActiveScaffold.В конце каждой строки в списке ActiveScaffold добавляет стандартные ссылки CRUD - Показать, Изменить, Удалить - для каждой записи.

Я не хочу использовать ActiveScaffold для этих действий (длинная история) и создалмои собственные контроллеры, чтобы справиться с этим.Я пытаюсь переопределить эти ссылки, чтобы они указывали на мои собственные контроллеры, но я не могу понять, как пройти через идентификатор записи.

Например, скажем, я хочу, чтобы новая ссылка для Show была / foo / show / [id] - у меня есть это в моей конфигурации ActiveScaffold:

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

Я не знаю, что пройти в id параметр.Я пытался использовать такие вещи, как: foo_id или foo_id, но контроллер не знает, что они.Например, когда я использую: foo_id, я просто получаю String - / 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 для экрана списка, потому что на самом деле я не хочу показывать свою собственную версию списка.Я нашел парня, задающего тот же вопрос в группах Google, но ответа не было.

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

Редактировать: я должен добавить, что отсутствие указания параметра: id на самом деле помещает идентификатор ActiveRecord по умолчанию в поле, но это не совсем то, что я хочу - опять же, длинная история ...: (

1 Ответ

1 голос
/ 12 октября 2010

Хорошо, это, вероятно, не лучшее решение, но самое очевидное.

В своем «Edit:» я добавил довольно важную деталь, которую я изначально пропустил. ActiveScaffold автоматически устанавливал идентификатор в URL как один из текущей записи, однако моим пользовательским контроллерам фактически требовался другой идентификатор (фактически, внешний ключ в записи).

Решение - теперь очевидное - состояло в том, чтобы просто изменить мой пользовательский контроллер, чтобы использовать идентификатор по умолчанию, через который он прошел, и изменить запрос ActiveRecord, чтобы использовать этот идентификатор ... d'oh.

...