2012-01-26 29 views
2

調用重定向方法,我想寫出這樣如何在型號

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 

代碼,但它不到風度的工作,它是提示:未定義的方法'重定向」爲#<爲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 
+3

你不應該這樣做。模型不應該知道關於URL的任何信息。這是控制器的工作(按照Sinatra的說法,路由)。 – Phrogz

回答

3

不要。該模型不負責路由或重定向。

此外,您的帖子路線看起來像borked。您正在將POST數據發送給它,然後傳遞給模型。該模型已創建並保存。你可以分解這兩個,如果model.save方法返回true,你重定向。

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

並非所有人都喜歡對模型的參數,所以要小心。

對於編輯,您通常會使用PUT方法,因爲您知道模型地址。所以要小心不要把它們混在一起(除非你知道你在做什麼)它會爲你節省很多的思考。

+0

答案並不直接解決問題,但它是一個很好的答案。 – Tony

+0

當然它不,但你原來的問題是無處可去。 – three