2012-05-25 98 views
0

這個工作,但感覺klunky。是否有更多的rails-y方法來限制基於params的集合?我正在使用活動模型序列化器gem,並且需要通過params限制json響應。如何檢查軌道控制器中是否存在參數?

def index  
if params.has_key?(:limit) 
    limit = params[:limit].to_i 
    @pages = Page.all.take(limit) 
else 
    @pages = Page.all 
end 
end 

如果我使用以下內容,則會在傳遞字符串或任何內容時收到錯誤消息給限制參數。

def index 
@pages = Page.limit(params[:limit]) 

respond_to do |format| 
    format.html # index.html.erb 
    format.json { render json: @pages } 
end 

謝謝!

回答

4

你不應該做任何事情。只需直接傳遞params [:limit]即可。

def index 
    @page = Page.limit(params[:limit]) 
end 

如果params [:limit]沒有定義(nil),它只會返回所有的記錄。您甚至不需要將其轉換爲整數。 Rails爲你做!

UPDATE

如果你真的想檢查非數字沒有被傳遞,你可以在你的頁面類來創建你自己的極限類方法(未測試,但應工作):

class Page << ActiveRecord::Base 

    def self.limit(num = nil) 
    num = num.to_i > 0 ? num : nil 
    super(num) 
    end 

end 
+0

我這麼認爲,但我得到的錯誤。我正在使用活動模型序列化器gem來轉換爲json。這裏是控制器的其餘部分: respond_to do | format | format.json {render json:@pages} end – kinet

+0

如果我嘗試URL:http:// localhost:3000/pages.json?limit = aaaa 我得到錯誤:Integer()的值無效:「aaaa 「 謝謝 – kinet

+0

我編輯了我的答案。 –

相關問題