1

私はRoRを初めて使用し、基本的な検索フォームを作成できましたが、検索タグ(名前)を展開しようとするとエラーが発生し続けます.さまざまなデータ(場所、Webサイト、電子メール、電話)を含むモデルがあり、これらを現在の検索コードに追加する方法を考えていました。

/models/ciir.rb

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

static_pages_controller.rb

def home
  @ciirs = Ciir.search(params[:search])
end

/home.html.erb

<%= form_tag ciirs_path, :method => 'get' do %>
  <p>
    <%= text_field_tag :search, params[:search] %>
    <%= submit_tag " Search Database Records ", :name => nil %>
  </p>
<% end %>

送信ボタン (検索語なし) をクリックすると、URL は次のようになります。

ciirs?utf8=✓&amp;search=

ただし、名前条件を「website」のようなものに変更すると、URL が次のように変更されます

ciirs?utf8=✓&amp;search=&commit=+Search+Database+Records+ –
4

2 に答える 2

6

あなたは RoR に慣れていないとおっしゃっていたので、RoR が一度に 1 つの問題を読み、使用し、分析していることを私が学んだ方法を共有しなければなりません。次のポイントを 1 つずつ見て、RoR がそれらをどのように扱い、それらがあなたの質問にどのように適合するかを試してみることをお勧めします。

  1. どのようにform_tag動作しますか?

  2. どのようにtext_field_tag動作しますか?

  3. 理解できたら、とform_tagの違いは?text_field_tagf.text_field

  4. オブジェクトはどのようparamsに作成され、フォーム コントロールの名前を使用しますか?

  5. GETand/or POSTform メソッドをいつ、どのように使用するか? うっかりして、さまざまな種類のメソッドとはどのような場合に使用するのでしょうか?

  6. でどのようURLに使用され、form_tagどのようなコンポーネントで構成されていますか?

  7. sとesのRuby間を学ぶことで、語学の知識を少しだけふりかけませんか?実際、できるだけ多くのことを学びましょう。ArrayHashRuby

ご質問にお答えしますと、

/home.html.erb

<%= form_tag "/static_pages/home", :method => 'post' do %>
  <p>
    <%= text_field_tag "search[name]", params.has_key?("search") && params[:search].has_key?("name") ? params[:search][:name] : "" %>
    <%= submit_tag " Search Database Records " %>
  </p>
<% end %>

/models/ciir.rb

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

そこで、あなたのフォームを修正し、RoR にsearch paramsのデータを含むように伝えましたname

paramsHash( であるkey-value pair) という名前のキーを持ちsearch、さらにという名前のHashキーを持ちますname

モデル コードでも同じ原則に従います。Hashof キーsearchを関数に渡し、そこで という名前のキーの値を使用しましnameた。

の URL も更新してform_tag、コントローラーのホーム アクションを指すようにしました。ファイルに追加したと仮定するとroutes.rb、通常はパターンcontroller_name/action_nameまたは関数名action_name_controller_name_pathまたはaction_name_controller_name_url. rake routesルート ディレクトリでコマンドを実行して、アプリケーション内のすべてのパスを一覧表示します。

POSTまた、オリジナルの代わりにメソッドを使用したことに注意してくださいGET。ここで使いたいと思うかもしれませんGETので、元に戻してください。

これがうまくいくことを願っています。

于 2013-08-11T22:32:59.207 に答える
0

あなたのコードにエラーは見つかりませんでした。に変更された URLciirs?utf8=✓&amp;search=&commit=+Search+Database+Records+は正常です。submit_tagデフォルトでは名前付きの「commit」を生成buttonし、params で解析されます。:name => nil を追加すると、問題が修正されます。コードの他の部分を変更する必要はありません。コードをコピーしてテストしたところ、スムーズに実行されました。

于 2013-08-12T05:29:04.160 に答える