Как вызвать метод перенаправления в Model - PullRequest
2 голосов
/ 26 января 2012

Я хочу написать код, подобный этому

require 'sinatra'

class MyModel
    def edit(request)
        # ...
        updateOK = true
        redirect '/article_view' if updateOK

        :article_edit
    end
end

get '/article_view' do erb :article_view end
get '/article_edit' do erb :article_edit end

post '/article_edit' do
    model = MyModel.new
    erb model.edit(request)
end

, но он не работает, советует: неопределенный метод `redirect 'для #

Есть ли способ вызвать метод перенаправления в моей пользовательской модели?


Ха-ха, я знаю, как заставить код работать, несмотря на то, что он пишет неправильно.

require 'sinatra'

class MyModel
    def edit(context)
        # ...
        updateOK = true
        context.redirect '/article_view' if updateOK

        :article_edit
    end
end

get '/' do erb :index end
get '/article_view' do erb :article_view end
get '/article_edit' do erb :article_edit end

post '/article_edit' do
    model = MyModel.new
    erb model.edit(self)
end

1 Ответ

3 голосов
/ 26 января 2012

Не.Модель не несет ответственности за маршрутизацию или перенаправление.

Кроме того, ваш почтовый маршрут выглядит потерянным.Вы отправляете ему данные POST, которые затем передаются в модель.Модель создана и сохранена.Вы можете разделить эти два параметра, и если метод model.save возвращает true, вы перенаправляете.

post '/model/new' do
  model = Model.new params
  redirect to("/model/#{model.id}") if model.save
end

Не всем нравится перенаправлять параметры в модель, поэтому будьте осторожны с этим тоже.Для редактирования вы обычно используете метод PUT, потому что вы знаете адрес модели.Поэтому будьте осторожны, чтобы не перепутать их (если вы не знаете, что делаете). Это избавит вас от долгих размышлений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...