【问题标题】:SQLite3::SQLException Implementing Search Function In RailsSQLite3::SQLException 在 Rails 中实现搜索功能
【发布时间】:2014-04-28 19:01:17
【问题描述】:

我正在开发 Rails 中的搜索功能。我按照以下教程进行操作

http://railscasts.com/episodes/37-simple-search-form

因此,我使用以下内容更新了我的 tutorial.rb

def self.search(search)
  if search
    find(:all, :conditions => ['name LIKE ?', "%#{search}%"])
  else
    find(:all)
  end
end

使用以下内容更新我的 tutorials_controller.rb

def index
  @tutorials = Tutorial.search(params[:search])
end

最后是我的观点

<div id="search">
      <%= form_tag tutorials_path, :method => 'get' do %>
    <p>
      <%= text_field_tag :search, params[:search] %>
      <%= submit_tag "Search", :name => nil, :class => "btn btn-success" %>
     </p>
    <% end %>
 </div>

所以一切都在显示。当我点击搜索框时,我收到以下错误。

ActiveRecord::StatementInvalid in TutorialsController#index

SQLite3::SQLException: no such column: name: SELECT "tutorials".* FROM "tutorials"  WHERE     (name LIKE '%%')

非常感谢任何帮助。对此仍然很陌生,并且对我的深度有所了解。我可以看到它在从数据库中获取信息时遇到问题,但不知道如何解决它。

干杯!

【问题讨论】:

标签: ruby-on-rails ruby database search sqlite


【解决方案1】:

根据错误SQLite3::SQLException: no such column: nametutorials 表中没有列 name

如果您打算根据 name 字段搜索 tutorials 表,然后将其添加到 tutorials 表并进行迁移:

rails g migration AddNameToTutorial name

运行rake db:migrate

在 Tutorial 表中插入一些带有名称的记录。

然后,根据tutorials 表中的名称字段使用您当前的代码继续search


第二个选项是,如果您打算根据其他一些 existing field 搜索 tutorials 表,那么只需更新搜索方法如下:

def self.search(search)
  if search
    find(:all, :conditions => ['fieldname LIKE ?', "%#{search}%"])
  else
    find(:all)
  end
end

fieldname 替换为您要搜索的属性名称。

【讨论】:

    猜你喜欢
    • 2017-02-22
    • 2018-09-04
    • 1970-01-01
    • 2020-07-18
    • 1970-01-01
    • 1970-01-01
    • 2019-05-06
    • 2021-05-13
    相关资源
    最近更新 更多