将Ruby代码从视图中提取到Helper中

时间:2013-12-06 18:46:07

标签: ruby-on-rails ruby methods ruby-on-rails-4

我在视图中有一些ruby代码并且它工作得很好但是我知道这不是正确的方法,所以想把它放到一个帮助方法中(感谢@SimoneCarletti)。我遇到了一些困难,通常我发现这里10000人比我优秀的Rubyist更聪明。

这是我想要放入帮助程序的代码

product_feed_item.voters_who_voted.map(&:full_name).join(("<br />").html_safe)

以下是我的用户模型中的方法,以获取用户的product_feed

def product_feed
  Design.from_users_followed_by(self).to_a.concat Product.from_users_followed_by(self).to_a
end

此视图的控制器是

@product_feed_items = current_user.product_feed
@product_feed_items.sort! {|t1, t2| t2.created_at <=> t1.created_at}

respond_to do |format|
  @product_feed_items = @product_feed_items.paginate(:page => params[:page], :per_page => 20)
  format.html
  format.json { render json: @product_feed_items }
end

并且视图

<%= render partial: "shared/product_feed_item", collection: @product_feed_items %>

其中partial包含我要提取到方法中的第一个代码块。

我怎样才能将它放入方法?如果您需要我澄清或添加任何帮助,请告诉我。

提前感谢您的帮助!节日快乐!

2 个答案:

答案 0 :(得分:1)

除非我遗漏了某些东西,否则它就像下面一样简单

def voter_full_names(product_feed_item)
  product_feed_item.voters_who_voted.map(&:full_name).join(("<br />").html_safe
end

在你看来

<%= voter_full_names(product_feed_item)%>

答案 1 :(得分:0)

您可以尝试使用装饰器。使用Draper装饰器,您可以使用与表示相关的逻辑来包装模型以进行组织。

https://github.com/drapergem/draper