我正在研究Rails中的搜索功能。我按照以下教程
http://railscasts.com/episodes/37-simple-search-form
因此我使用以下
更新了我的tutorial.rbdef self.search(search)
if search
find(:all, :conditions => ['name LIKE ?', "%#{search}%"])
else
find(:all)
end
end
使用以下
更新我的tutorials_controller.rbdef 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 '%%')
任何帮助非常感谢。这还是新的,我的深度。我可以看到从数据库获取信息时遇到问题,但不确定如何解决它。
干杯!
答案 0 :(得分:0)
根据错误SQLite3::SQLException: no such column: name
,
name
表格中没有列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
。