如何调用Model中的重定向方法

时间:2012-01-26 06:46:53

标签: ruby sinatra

我想写这样的代码

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'用于#< MyModel:0x24e3910>

有没有办法在我的自定义模型中调用重定向方法?


哈哈,我知道如何使代码有效,尽管它写错了。

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 个答案:

答案 0 :(得分:3)

别。该模型不负责路由或重定向。

此外,您的邮寄路线看起来很笨拙。您正在向其发送POST数据,然后将其传递给模型。创建并保存模型。您可以拆分这两个,如果model.save方法返回true,则重定向。

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

并非所有人都喜欢对模型进行伪装,因此也要小心。

对于编辑,您通常使用PUT方法,因为您知道模型地址。所以要小心不要混淆它们(除非你知道你在做什么)它会为你节省很多思考。

相关问题