Rails 3 - 循环获取集合?

时间:2011-03-11 18:59:35

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

我正在实施搜索,并且在使用我的sql / find时遇到了一些困难。

基本上,我有一个收藏页面,它收集了收藏夹:

@favorites = current_user.votes

在视图中,我循环浏览我的收藏夹,并可以调用.voteable来获取投票的实际对象。这使得我很难写出搜索。

我想知道是否有可能改变我的原始集合,所以我实际上每次都会获取.voteable对象来干涸我的视图/帮助我编写搜索。我不能调用current_user.votes.voteables但可以单独执行类似current_user.votes.first.voteable

的操作

我试过的是这样的循环:

@favorites = current_user.votes.each {|vote| vote.voteable }

哪个错了,我只是再次获得投票,而不是真正的投票对象。我只是想知道是否有办法让这些投票通过这样的投票来循环投票。

任何指针都会有所帮助,谢谢。

编辑:

通过搜索扩展我的意思:

我正在模型中构建一个搜索self的方法,这是一个例子:

def self.search(search)
    if search
      where('title LIKE ?', "%#{search}%")
    else
      scoped
    end
  end 

我从视图中传入搜索,其形式如下:

<div id="search_form">
    <%= form_tag topic_links_path, :method => 'get', :id => "links_search" do %>
      <%= text_field_tag :search, params[:search], :size => "35"  %>
      <%= submit_tag "Search", :name => nil %>
    <% end %>
  </div>  

这样,当我在控制器中创建我的集合时,我可以调用.search(params [:search])来获取与用户在表单中输入的内容类似的项目。我正在使用vote_fu gem处理投票/投票。

1 个答案:

答案 0 :(得分:3)

您需要使用map代替each

@favorites = current_user.votes.map {|vote| vote.voteable }

each只是遍历元素并对它们执行操作,但它不会以数组格式返回结果。这就是map所做的。

另外,您可以使用范围进行搜索而不是功能。它可能更清洁一点:

scope :search, lambda{ |title| where('title LIKE ?', "%#{title}%") unless title.blank? }