【问题标题】:Trouble with Last Method in RailsRails 中最后一个方法的问题
【发布时间】:2012-09-27 17:58:54
【问题描述】:

让我先说我是 Rails 新手,所以我会尽力解释这一点。作为参考,请参阅此线程,它准确地描述了发生在我身上的事情,但修复似乎不起作用。

Problems with limit method in Rails 3.2 and hash ordering

我有一个数据库,其中包含我试图按主键“id”排序的事件。我在这里尝试在可排序表列上关注 Railscast:

http://railscasts.com/episodes/228-sortable-table-columns

排序工作正常,但排序发生在整个列上,而不仅仅是“最后 50 个”。

控制器代码:

def index
  @events = Event.order(sort_column + " " + sort_direction).page(params[:page]).last(50)
  @events = @events.sort_by(&:id)
  @events = Kaminari.paginate_array(@events).page(params[:page]).per(10)
end

def sort_column
  Event.column_names.include?(params[:sort]) ? params[:sort] : "event_id"
end

def sort_direction
  %w[asc desc].include?(params[:direction]) ? params[:direction] : "desc"
end

Application_helper:

    def sortable(column, title = nil)
  title ||= column.titleize
  direction = column == sort_column && sort_direction == "desc" ? "asc" : "desc"
  link_to title, :sort => sort_column, :direction => direction
end

最后,在索引视图中,我这样称呼它:

<th><%= sortable  "event_id" %></th>

很抱歉,如果这个问题已经得到解答,我们将不胜感激。

编辑

感谢您的快速回复。我明白你在那里做了什么,但现在我的索引视图中由于某种原因出现异常。

 undefined method `id' for #<Array:0x00000004170c10>

Extracted source (around line #25):

22:   <tbody>
23:     <% @events.each do |event| %>
24:       <tr>
25:         <td><%= link_to event.id, event_path(event) %></td>
26:         <td><%= event.event_date_time_local %></td>
27:         <td><%= EventType.find(id =    event.event_type_id).event_type %></td>
28:         <td>

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3


    【解决方案1】:

    您说的是“而不是最后 50 个”,但这就是您要返回的全部内容。根据 sort_column 和方向排序后找到的最后 50 个项目。

    @events = Event.order(sort_column + " " + sort_direction).page(params[:page]).last(50)
    #Sorted the last 50 by sort_column and direction
    
    @events = @events.sort_by(&:id)
    #sorted again by id and lost the first sort
    

    要获取所有事件,然后对你可以做的最后 50 个事件进行排序

    @events = Event.order(sort_column + " " + sort_direction).page(params[:page])
    last_fifty = @events.pop(50) # remove last 50 and return it
    
    @events << last_fifty.sort_by(&:id) # insert last fifty back sorted by id
    

    编辑:

    对不起,不是

    @events << last_fifty.sort_by(&:id)
    

    试试

    @events.concat last_fifty.sort_by(&:id)
    

    【讨论】:

    • 感谢您的回复。我已经用收到的新错误更新了我的初始帖子。
    • 再次感谢您的帮助。该列现在似乎显示最后 50 个条目,然后当我对该列进行排序时,它显示前 50 个条目。我认为这里还有其他问题。我将尝试改变我这样做的方式。例如,获取最后 50 条记录,然后当用户单击“下一页”按钮时,它将请求接下来的 50 条记录,依此类推。
    猜你喜欢
    • 1970-01-01
    • 2018-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-03
    相关资源
    最近更新 更多