这是我尝试在我的rails应用程序中实现一个简单的搜索表单的第一次尝试,如果我犯了一些重大错误,那么请原谅我
我有一个看起来像这样的搜索表单
<%= form_tag({:controller => 'search', :action => 'search'}, {:method => 'get'}) do |s| %>
<%= text_field_tag :search, params[:search] %>
<%= submit_tag "Search" %>
<% end %>
我的控制器
def search
@countrysearch = Recipe.find(params[:search])
end
现在我正在输出我的结果
<h4>output</h4>
<%= @countrysearch %>
我正在获取输出但是如果我搜索像威尔士这样的单词,我会收到一条错误,说找不到id,但是如果我搜索的是像17这样的ID,那么我得到了
#<Recipe:0x97b0fa8>
我已经查看了find_by_sql方法,但我对此的理解还没有,我根本没有依赖于我输入的字符串进行搜索的语法,但我想这并不重要,因为params是内容的搜索字段?
如果有任何可以帮助的话,我们将非常感激
由于
答案 0 :(得分:1)
模型find
方法(Recipe.find()
)需要实例的数字ID(特定配方)。但看起来您正在按国家/地区名称进行搜索。在Rails中有很多方法可以做到这一点。首先,我假设您的食谱模型有一个属性,如&#34; country&#34;其价值观与威尔士&#34;。
如果是这样,那么你可以使用这样的搜索方法:
def search
@countrysearch = Recipe.find_by_country(params[:search])
end
或者您也可以在Rails 3中使用新方法
def search
@countrysearch = Recipe.where(:country => params[:search])
end
不要使用find_by_sql
- 它会起作用,而且还不错,但是你却错过了Rails的一些主要功能。
还有其他一些值得一提的事情:
@countrysearch
实例变量之前,请使用if @countrysearch.nil?
或针对肯定案例if @countrysearch.present?
Recipe
的实例,而是它们的集合 - 在你的视图中,迭代使用
&lt;%@ countrysearch.each do | recipe | %GT;
&lt;%= recipe.name%&gt;
...
&lt;%end%&gt; Recipe.find_all_by_country