【问题标题】:Rails Search [params] errorRails 搜索 [参数] 错误
【发布时间】: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


【解决方案1】:

修改

def index
 @firms = Firm.search(params[:search], params[:id])
end

def self.search(search, id)
 if search
   where(['name LIKE ?', "%#{search}%"]).page(id)
 else
  scoped
 end
end

【讨论】:

  • 就像做梦一样!谢谢迈克,感谢 @mikej 帮助我了解它是如何工作的!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-24
相关资源
最近更新 更多