Ruby on rails Rails 4名称错误
我开始学习rails,但遇到了一个问题。 我有一个包含名称和其他列的用户表。我要按“姓名”搜索 音乐控制器.rbRuby 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
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 %>