【问题标题】:Simple Search Form in Rails 3 App not DisplayingRails 3 应用程序中的简单搜索表单不显示
【发布时间】:2012-02-27 10:17:28
【问题描述】:

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

这里是表单所在的索引页:

<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

【问题讨论】:

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


    【解决方案1】:

    我没有进一步看,但在最近的 Rails 版本中,form_tag 中必须有一个等号。您还应该在开发模式下收到一条错误消息。 试试&lt;%= form_tag users_path, :method =&gt; 'get' do %&gt;

    【讨论】:

      【解决方案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
      

      所以这就是我为我的应用程序所做的,并且它奏效了。我希望它有所帮助。

      【讨论】:

      • 做到了!万分感谢!如果我有更多的声誉,我会 +1 你
      最近更新 更多