Rails 3应用程序中的简单搜索表单不显示

问题描述:

我跑过了railscast#37,似乎甚至无法让我的搜索表单显示在我的索引页上。任何想法什么是我的代码错了?提前致谢!任何帮助是极大的赞赏。Rails 3应用程序中的简单搜索表单不显示

这里是索引页,其中表格位于:

<h1>All users</h1> 

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

继承人的控制器:

class UsersController < ApplicationController 

    ... 

    def index 
    @title = "All users" 
    @users = User.paginate(:page => params[:page]) 
    @usersearch = User.search(params[:search]) 
    end 

    ... 

最后,user.rb文件:

... 
def self.search(search) 
    if search 
    where('name LIKE ?', "%#{search}%") 
    else 
    all 
    end 
end 

我看到您以前的问题。我在提交答案时被删除。这看起来类似于这个问题,所以这里是我对前一个问题和这个问题的回答。

我根据他们的国家搜索了用户。所以这就是我为此所做的: 首先,我根据我要搜索的内容创建了一个新的列国家。该命令是

$ rails generate migration add_country_to_users country:string 
    $ rake db:migrate 

这个字符串添加到attr_accessible用户模型如下:

class User < ActiveRecord::Base 
    attr_accessor :password 

    attr_accessible :name, :email, :password, :password_confirmation, :country 
    validates_presence_of :country 

    .......... 

attr_accessible让你做一个质量分配。不要忘记在这里添加新的列。

完成此操作后,您即可编写控制器功能。我将它命名为network,因为我想根据国家/地区显示用户。我的搜索词将成为国家,我将显示属于某个特定国家的所有用户。该函数定义如下:

class UsersController < ApplicationController 
    def network 
     @title = "All users" 
     @users = User.find_all_by_country(User.find(params[:id]).country) 
    end 
end 

对于你的问题,如果你想显示用户的名字使它

User.find_all_by_name(User.find(params[:id]).name) 

或类似的东西,基于我们的搜索词。

现在来到显示器。我在views/users/下创建了一个新页面network.html.erb,因为我想显示属于一个国家的用户的网络。首先有一种形式,您可以在其中输入内容,即您调用搜索的位置。对于我的表单,我的表头中有一个链接。链接如下:

<li><%= link_to "Network", network_user_path(current_user) %></li> 

一旦用户点击这个下面的表格将被显示:

<h1>All users</h1> 
<ul class="users"> 
    <% @users.each do |user| %> 
    <li> 
    <%= gravatar_for user, :size => 30 %> 
    <%= link_to user.name, user %> 
    </li> 
<% end %> 
</ul> 

到目前为止,一切都很好。现在最后一步是通过将它们添加到routes.rb文件中来连接它们。在该文件中添加以下内容: MyApp :: Application.routes。抽奖做

resources :users do 
    member do 
     get :following, :followers, :network, :news 
    end 
    end 
end 

所以这就是我为我的应用程序,它的工作。我希望它有帮助。

+0

做到了!万分感谢!如果我有更多的声望,我会给你+1 – BTHarris 2012-02-05 20:55:20

我没再看看,但最近Rails版本中的form_tag必须有一个等号。你也应该在开发模式下得到一个错误信息。 尝试<%= form_tag users_path, :method => 'get' do %>

+0

谢谢!那工作 – BTHarris 2012-02-05 19:06:13