我浏览了#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
答案 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
所以这就是我为我的应用程序所做的工作。我希望它有所帮助。