0

Rails 3、mac os マウンテン ライオン、Ruby 1.9.3 を使用しています。

だから私はobject1と呼ばれるこのオブジェクトを持っています。そのための検索機能を作成しましたが、正しく機能します。

def self.search(search)
  search_condition = "%" + search + "%"
  if search
    find(:all, :conditions => ['name LIKE ?', search_condition])
  else
    find(:all)
  end
end

これをobject2で使用したいと思います。だからobject2コントローラーで私は書いた:

def search
  @results = Object1.search(params[:search])
end

そしてビューで:

= form_tag object2_path, :method => 'get' do
  #{text_field_tag :search, params[:search], :id => 'search_field'}
  #{submit_tag "Search", :name => nil}

- for result in @results
  %li
    = result.name

しかし、何らかの理由で @results が nil を返します。私がやっていることの何が問題になっていますか?どうもありがとう。

4

3 に答える 3

0

routes.rb で検索方法が定義されていることを確認しましたか? そうしないと、デフォルトで show アクションになり、@search が設定されていない可能性があります。

フォームの URL を変更することもできます。

form_tag object2_path, :method => 'get' do

form_tag search_object2_path, :method => 'get' do

あなたのコントローラーコードは私には問題ないようです。

于 2013-02-26T07:47:25.220 に答える
0

検索を行うコードは正しいです。それは問題ではありません。あなたの見解では、次のように書きます。

= form_tag object2_path, :method => 'get' do

特別な措置を講じない限り、これはindexobject2-controller のメソッドにヒットします。params[:search]したがって、定義されている場合は検索するようにインデックス メソッドを変更することで、これを修正できます。

または、フォームのパスを変更して検索パスに移動し、正しいビューが表示されることを確認します。

HTH。

于 2013-02-22T15:21:30.177 に答える
-1

共通コードは常にアプリケーション ヘルパーに配置します。

アプリケーション ヘルパー:

module ApplicationHelper
  def search(search)
    search_condition = "%" + search + "%"
      if search
        find(:all, :conditions => ['name LIKE ?', search_condition])
      else
        find(:all)
      end
  end
end

これで、次のようにコントローラーからメソッドを呼び出すことができます。

search(params[:search])

コントローラーからヘルパー メソッドを呼び出す方法を確認したい場合は、このSO 投稿を確認してください。

于 2013-02-22T10:18:29.047 に答える