Как сохранить ассоциацию ActiveRecord DRY?

Вот решение:

 library(tidyverse)
 df<-data.frame(Name=c("A","B","C"),Month=as.factor(c(11,11,11)),Amount=c(123,456,789))
 df %>% 
 arrange(desc(Amount)) %>% 
 top_n(2,Amount)#change 2 to 5

Лучше всего предоставить пример данных:

iris %>% 
  group_by(Species) %>% 
  arrange(desc(Sepal.Length)) %>% 
  top_n(5,Sepal.Length)

ИЛИ :: На основе данных @Chabo:

User<-c(6,2,3,4,5,6)
Transaction.Date<-c("11-1-2019","11-2-2019","11-3-2019",
                    "12-1-2019","12-2-2019","11-1-2019")
Amount<-c(100,200,300,400,500,150)
df1<-data.frame(Amount,Transaction.Date,User)
df1 %>% 
  group_by(User,Transaction.Date) %>% 
  arrange(desc(Amount)) %>% 
  top_n(5,Amount) %>% 
  ungroup() %>% 
  top_n(5,Amount)
5
задан Ferruccio 16 October 2008 в 21:56
поделиться

1 ответ

Я читал на блоге где-нибудь для простой замены перед фильтрами (или загружающий все виды данных в методе контроллера) со вспомогательными методами. Что-то вроде этого:

class BlogsController < ApplicationController
  def show
    session[:found_user]=@user.login
    render :layout=>false
  end

  helper_method :user, :blog, :posts, :tags, :pages, :links, :archives, :categories

  protected
  def user
    @user ||= User.find_by_login(params[:id])
  end

  def blog
    @blog ||= user.blog
  end

  def posts
    @posts ||= Post.status("publish", user).find(:all, :order => "created_at DESC")
  end

  def tags
    @tags ||= user.tags
  end

  def pages
    @pages ||= Page.status("publish", user).find(:all, :order => "created_at DESC")
  end

  def links
    @links ||= user.links.public_link.find(:all, :order => 'created_at DESC')
  end

  def archives
    @archives ||= posts.group_by(&:month)
  end

  def categories
    @categories ||= user.categories.group_by(&:name)
  end
end

## app/views/blogs/show.html.erb
<p>Name: <%=h user.name %></p>
<h3><%= posts.length %> Posts</h3>
<% posts.each do |post| %>
  ...
<% end %>
<ul>
  <% categories.each do |category| %>
    <li><%=h category %></li>
  <% end %>
</ul>

Посмотрите, как в представлении с помощью чего-либо просто обращается к базе данных. Преимущество этого решения состоит в том, что вспомогательные методы, которые не называют, не займут время от действия.

При необходимости абстрагируйте вспомогательные методы в модуль и включайте модуль в ApplicationController.

3
ответ дан 15 December 2019 в 06:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: