【发布时间】:2012-04-25 19:38:37
【问题描述】:
您好,我有一个我的公司的搜索栏.. 但是它似乎在抛出错误,我无法弄清楚原因!
我的观点
application.html.erb
<%= form_tag firms_path, :method => 'get', :class => 'form-search' do %>
<%= text_field_tag :search, params[:search], :class => 'input-medium search-query', :placeholder => 'Firm name' %>
<%= submit_tag "Search", :name => nil ,:class => 'btn' %>
<% end %>
我的公司_controller.rb
def index
@firms = Firm.search(params[:search])
end
def self.search(search)
if search
where(['name LIKE ?', "%#{search}%"]).page(params[:id])
else
scoped
end
end
这曾经可以正常工作,但现在它正在抛出这个错误。
NameError in FirmsController#index
undefined local variable or method `params' for #<Class:0x007f93cd8b2ac8>
app/models/firm.rb:13:in `search'
app/controllers/firms_controller.rb:8:in `index'
有什么想法吗? 在此先感谢您的帮助
罗斯
【问题讨论】:
-
params是一种控制器方法,因此不能从您的一个模型内部的方法中使用。 -
您在哪个表中找到名称,例如......
-
我正在使用 Firm.search 调用 Firm 表上的 self.search 方法,我认为视图中的 [params]:search 将其绑定到控制器 .search 的参数方法?
-
在您的控制器中,
params是一个(稍微简化)返回哈希的方法调用。因此,params[:search]将来自该散列的搜索参数的值作为字符串提供。然后将此字符串传递给您的Firm.search。当您进入Firm.search时,不再有任何东西将您束缚在控制器上。 Mike's answer 是一种可行的解决方案。希望这是有道理的。
标签: ruby-on-rails ruby-on-rails-3 search model