0

我正在尝试在我的 rails 应用程序中实现搜索。我有一个User模型,其中每个用户都有一个id和一个facebook_id.

如何实现搜索facebook_id?我正在寻找这样的称呼:localhost:3000/users.json?facebook_id=123456.

谢谢!

编辑:我尝试了条件索引,但收到错误“我们很抱歉,但出了点问题。”

这是我的代码:

  def index
    if params[:facebook_id]
      respond_with User.find(params:facebook_id)
    elsif params[:twitter_id]
      respond_with User.find(params:twitter_id)
    else
      respond_with User.all
    end
  end

导轨日志:

2012-08-07T19:43:11+00:00 app[web.1]: Started GET "/users.json?facebook_id=1" for 173.247.200.7 at 2012-08-07 19:43:11 +0000
2012-08-07T19:43:11+00:00 app[web.1]: Processing by UsersController#index as JSON
2012-08-07T19:43:11+00:00 app[web.1]:   Parameters: {"facebook_id"=>"1"}
2012-08-07T19:43:11+00:00 app[web.1]: Completed 500 Internal Server Error in 2ms
2012-08-07T19:43:11+00:00 app[web.1]: 
2012-08-07T19:43:11+00:00 app[web.1]: NameError (undefined local variable or method `facebook_id' for #<UsersController:0x000000044b6e38>):
2012-08-07T19:43:11+00:00 app[web.1]:   app/controllers/users_controller.rb:4:in `index'

Edit2:将参数从更改为后params:facebook_idparams[:facebook_id]我收到另一个错误。这是我的 Rails 日志的副本。

2012-08-07T19:53:45+00:00 app[web.1]: Started GET "/users.json?facebook_id=1000" for 173.247.200.7 at 2012-08-07 19:53:45 +0000
2012-08-07T19:53:45+00:00 app[web.1]: Processing by UsersController#index as JSON
2012-08-07T19:53:45+00:00 app[web.1]:   Parameters: {"facebook_id"=>"1000"}
2012-08-07T19:53:45+00:00 app[web.1]: Completed 500 Internal Server Error in 2ms
2012-08-07T19:53:45+00:00 app[web.1]: 
2012-08-07T19:53:45+00:00 app[web.1]: ActiveRecord::RecordNotFound (Couldn't find User with id=1000):
2012-08-07T19:53:45+00:00 app[web.1]:   app/controllers/users_controller.rb:4:in `index'
4

3 回答 3

6

您正在错误地访问 params 哈希(您正在做params:facebook_id,应该是params[:facebook_id])。试试这个:

def index
    if params[:facebook_id]
      respond_with User.find(params[:facebook_id])
    elsif params[:twitter_id]
      respond_with User.find(params[:twitter_id])
    else
      respond_with User.all
    end
  end

第二个错误(您的第二次编辑)是因为您试图获取一个不存在的用户(id = 1000)。发生这种情况是因为您正在通过其主键 (id) 查找用户。从指南

如果没有找到匹配的记录,Model.find(primary_key) 将引发 ActiveRecord::RecordNotFound 异常。

如果你想通过facebook id获取,你应该可以这样做:

User.find_by_facebook_id(params[:facebook_id])

这种查找器称为动态查找器,它基本上可以让您执行以下操作:

Model.find_by_field

其中 field 是与您的模型相关的表的任何字段或属性。

于 2012-08-07T19:48:50.170 回答
1

你的方法很好。您可以按照您的建议添加查询参数,并在控制器中添加逻辑,如果 facebook_id 存在则搜索用户。 :facebook_id将在与 URL 匹配的控制器操作中可用。在你的情况下,这可能是User#index行动。

于 2012-08-07T19:07:49.383 回答
0

您可以在视图中放置一个搜索表单:

<%= form_tag user_path, :method => 'post' do %>
  <%= text_field_tag :search, params[:search] %>
  <%= submit_tag "Search", :name => nil %>
<% end %>

控制器中类似以下内容:

def index
  @users = User.search(params[:search])
end

然后在模型中:

def self.search(search)
  if search
    find(:all, :conditions => ['facebook_id LIKE ?', "%#{search}%"])
  else
  find(:all)
  end
end
于 2012-08-07T19:50:53.173 回答