我正在实施搜索,并且在使用我的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处理投票/投票。
答案 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? }