SQLite3 :: SQLException在Rails中实现搜索功能

时间:2014-03-21 12:04:43

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

我正在研究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 '%%')

任何帮助非常感谢。这还是新的,我的深度。我可以看到从数据库获取信息时遇到问题,但不确定如何解决它。

干杯!

1 个答案:

答案 0 :(得分:0)

根据错误SQLite3::SQLException: no such column: namename表格中没有列tutorials

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

rails g migration AddNameToTutorial name

运行rake db:migrate

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

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


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

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

使用您要搜索的属性名称替换fieldname