2012-08-03 2 views
0

나는 레일즈 초보자입니다. 내 트윗에서 간단한 검색을 구현하려고하지만 은 검색중인 특정 트윗이 ​​아닌 인 전체 트윗을 표시합니다. SQLite와 Rails 사용하기 3.2.6Cant는 Rails에서 간단한 검색 작업을 수행합니다.

나는 RailsCast # 37과 다른 튜토리얼들을 보았지만, 나는 실수를하고있는 곳을 모른다. 내 색인 페이지

<%= simple_form_for tweets_path, :method => 'get', :html => { :class => 'pull-right' } do |f| %> 
    <%= f.input :search, :label => false, :input_html => { :class => 'span3'} %> 
<% end %> 

트윗 마이그레이션

class CreateTweets < ActiveRecord::Migration 
    def change 
    create_table :tweets do |t| 
     t.text :body 
     t.references :user 

     t.timestamps 
    end 
    add_index :tweets, :user_id 
    end 
end 
을에

내 트윗 모델

class Tweet < ActiveRecord::Base 
    belongs_to :user 
    attr_accessible :body 
    def self.search(search) 
     if search 
      find(:all, :conditions => ['body LIKE ?', "%#{search}%"]) 
     else 
      find(:all) 
     end 
    end 

end 

컨트롤러

@tweets = Tweet.search(params[:search]) 

양식

내가 검색 할 때의 URL!

http://localhost:3000/tweets?utf8=%E2%9C%93&%2Ftweets%5Bsearch%5D=awesome 

도움말 및 지원 찾기 미리 감사드립니다!

+0

는'params' 해시에 문제가있을 수 있습니다. 컨트롤러의 검색 액션에'raise params.to_yaml'을 넣어서'params' 해시를 디버깅하여 어떤 문자열이 전달되는지 확인할 수 있습니다. 또한 Rails 터미널에서'Tweet.search ("some text")'를 테스트하여 Tweet.search 함수에 문제가 있는지 확인할 수 있습니다. – bevanb

+0

코멘트 주셔서 감사합니다. 나는 Tweet.search ("some text")로 시도해 보았고 검색이 효과가있다. Cant가 params (: 검색)를 사용하는 방법에 대한 아이디어를 얻은 것 같습니다. – gkolan

답변

0

나는 param의 이름이 잘못되었다고 생각합니다. here 봐, 당신은 같은 것을 작성해야 컨트롤러에 '컨트롤을 폼의 값에 액세스 할 수 PARAMS에 사용되는 키를 form_for에 전달 이름': 그래서,

@tweets = Tweet.search(params[:tweets][:search]) 
+0

의견을 주셔서 감사합니다. Tweet.search (params [: search])를 Tweet.search (params [: tweets] [: search])로 바꿨습니다.이 오류는 nil에 대해'[] '메서드를 정의하지 못했습니다 : NilClass 어떤 생각? – gkolan

+0

param의 이름은 아마도 트윗이 아닙니다. 매개 변수를 출력하고 매개 변수 이름이 정확히 무엇인지 확인할 수 있습니다. – davidrac

+0

이렇게 물어서 미안 해요! 정확히 어떻게해야할까요? – gkolan