0

Railsアプリで検索を実装しようとしています。各ユーザーがとを持っているUserモデルがあります。idfacebook_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

Railsログ:

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 を から に変更した後、params:facebook_idparams[:facebook_id]のエラーが発生しました。ここに私のレールログのコピーがあります。

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

2 番目のエラー (2 番目の編集) は、存在しないユーザー (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 に答える
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 に答える