Rails 3 App中的简单搜索表单未显示

时间:2012-02-05 18:11:21

标签: ruby-on-rails ruby ruby-on-rails-3 model-view-controller model

我浏览了#37的railscast,似乎甚至无法将我的搜索表单显示在我的索引页面上。我的代码有什么问题吗?提前致谢!非常感谢任何帮助。

以下是表单所在的索引页面:

<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

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

我看到了你之前的问题。在我提交答案时它被删除了。这看起来与那个问题相似,所以这是我对前一个问题和这个问题的回答。

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

  $ 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.draw做

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

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