Rails:在HTML页面上显示数据库查询,ActiveRecord

时间:2015-07-02 06:27:33

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

我正在尝试为我的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转换为数组,那么我能够将其编入索引? 感谢。

2 个答案:

答案 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转换为数组。