Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails 4名称错误_Ruby On Rails_Ruby_Ruby On Rails 4 - Fatal编程技术网

Ruby on rails Rails 4名称错误

Ruby on rails Rails 4名称错误,ruby-on-rails,ruby,ruby-on-rails-4,Ruby On Rails,Ruby,Ruby On Rails 4,我开始学习rails,但遇到了一个问题。 我有一个包含名称和其他列的用户表。我要按“姓名”搜索 音乐控制器.rb class MusiciansController < ApplicationController def newsearch @users = User.search(params[:search]) end end 当我尝试查看页面时,会收到错误消息: Processing by MusiciansController#newsearch as H

我开始学习rails,但遇到了一个问题。 我有一个包含名称和其他列的用户表。我要按“姓名”搜索

音乐控制器.rb

class MusiciansController < ApplicationController
  def newsearch
    @users = User.search(params[:search])
  end
end
当我尝试查看页面时,会收到错误消息:

    Processing by MusiciansController#newsearch as HTML
DEPRECATION WARNING: ActiveRecord::Base#with_scope and #with_exclusive_scope are
 deprecated. Please use ActiveRecord::Relation#scoping instead. 
  User Load (15.6ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 2 LIMIT
 1
  User Load (0.0ms)  SELECT "users".* FROM "users" WHERE (name like '%%')
  Rendered musicians/newsearch.html.erb within layouts/application (15.6ms)
Completed 500 Internal Server Error in 31ms

ActionView::Template::Error (undefined local variable or method `musicians_path'
 for #<#<Class:0x00000006a3b118>:0x000000050a4a60>):
    1: <%= form_tag musicians_path, :method => 'get'  do %>
    2:   <%= text_field_tag :search, params[:search]%>
    3:   <%= submit_tag "Search", :name => nil  %>
    4: <% end %>
  app/views/musicians/newsearch.html.erb:1:in `_app_views_musicians_newsearch_ht
ml_erb__367792918_42364700'

假设您已正确设置路线,收集帮助程序是复数形式。你想要你的路。而且,由于您正在创建一个记录,所以您需要的是method::post,而不是:get


我对您的路径有点怀疑,因为如果您通过资源:muchers设置它们,通常也会存在mucher\u路径。

您显示给我们的代码与错误不符

在不知道路线的情况下,我猜你有

resources :musicians do 
  collection do 
    get :newsearch
  end
end
但是生成的路径名是muchers\u newsearch\u path复数!。您可以在控制台中使用rake路由轻松地验证可用的路径名:开始部分是路径名add path以获取函数名

建议改进 为什么不合并索引和搜索视图?您很可能希望直接从索引中搜索,而不是转到单独的页面

在控制器中写入:

def index
  @musicians = Musicians.search(params[:search])
end
在你的模型里写

def self.search(query_string)
  if query_string.present?
    where("name like ?", "%#{query_string}%") 
  else
    all
  end
end
在你看来!!!index.html.erb您只需要添加搜索表单

<%= form_tag musicians_path, :method => 'get'  do %>
  <%= text_field_tag :search, params[:search]%>
  <%= submit_tag "Search", :name => nil  %>
<% end %>

他不是在创建唱片,他是在尝试搜索音乐家,所以他想要一个根据某些搜索参数过滤的收藏。因此,使用get是完全可以接受的。此外,他正在使用一种特殊的途径来进行新闻搜索。
def self.search(query_string)
  if query_string.present?
    where("name like ?", "%#{query_string}%") 
  else
    all
  end
end
<%= form_tag musicians_path, :method => 'get'  do %>
  <%= text_field_tag :search, params[:search]%>
  <%= submit_tag "Search", :name => nil  %>
<% end %>