【问题标题】:A simple Sinatra/Ruby substitution一个简单的 Sinatra/Ruby 替换
【发布时间】:2013-02-13 16:24:26
【问题描述】:

在 Sinatra 中,我有一个简单的助手来返回一个符号:

def sort_column
  params[:sort] ? params[:sort].to_sym : :client_id
end

我的预订是由以下人员订购的:

get '/bookings' do
  @bookings = Booking.all(order: sort_column)
  erb :bookings
end

我希望根据另一个助手的输出对我的 Booking 进行升序或降序排序:

def sort_direction
  params[:direction] || "asc"
end

这个:

@bookings = Booking.all(order: sort_column.asc)

还有这个:

@bookings = Booking.all(order: sort_column.desc)

两者都可以正常工作。

但如果我使用:

@bookings = Booking.all(order: sort_column.sort_direction)

我得到一个私有方法错误,如果我尝试:

@bookings = Booking.all(order: sort_column + "." + sort_direction)

我得到一个“未定义的方法'+' for ...”错误

如何替换 sort_direction 的结果以确定 Booking 是按 asc 还是 desc 排序的?

谢谢

【问题讨论】:

    标签: ruby sinatra


    【解决方案1】:
    Booking.all(order: sort_column.send(sort_direction))
    

    【讨论】:

    • Kyle 的反应如此迅速,以至于我等了 10 分钟都无法接受你的回答。谢谢。
    • 是的,谢谢.. 我从未使用过/听说过 send(),但在将其插入我的代码之前进行了查找 (ruby-doc.org/core-1.9.3/Object.html#method-i-send)
    猜你喜欢
    • 2012-08-07
    • 1970-01-01
    • 2016-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-04
    • 1970-01-01
    相关资源
    最近更新 更多