我正在尝试为我的rails应用创建一个搜索表单,用户输入一个查询并根据该查询,我希望他们看到与该查询相关联的链接列表(这些链接来自我的'链接'表)。我创建了HTML表单,并让用户输入查询。我使用这个查询
<%= form_tag links_path, :method => 'get' do %>
<p>
<%= text_field_tag :search, params[:search] %>
<%= submit_tag "search", :name => nil %>
</p>
<% end %>
在我的链接表控制器中,我有一个if
语句,用于检查用户输入的内容,并将Link.where('title LIKE ?', '%{#params[:search]}%')
分配给@links
。然后将其转换为数组(.to_a
)
以下是索引操作中的语句:
def index
@links = Link.all
if params[:search]
#@links = Link.find(:all, :conditions => ['title LIKE ?', '%{#params[:search]}%'])
@links = Link.where('title LIKE ?', '%{#params[:search]}%')
@links.to_a
end
end
在我的index.html.erb
中,我想显示结果。我使用了<%= @links %>
但是,它显示了ActiveRecord:#<Link::ActiveRecord_Relation:0x0000000d5c69f0>
如何将查询结果ActiveRecord转换为数组,那么我能够将其编入索引? 感谢。
答案 0 :(得分:2)
永远不要使用
@links = Link.where('title LIKE ?', '%{#params[:search]}%')
这是一个安全问题。检查http://railscasts.com/episodes/25-sql-injection。
为了将所有喜欢视为输出,只需执行
即可@links = Link.where('title LIKE ?', params[:search]')
并在视图中执行
<%= @links.to_a %>
这应该有帮助:)
答案 1 :(得分:1)
您需要像这样分配@links:
@links = @links.to_a
顺便说一下,如果你想使用 @ links.each 之类的东西逐个渲染链接,你就不需要将@links转换为数组。