3

シンプルな選択フォームがあります。フォームから年を選択したら、同じページでフォームの下に結果を返したいのですが。誰かがこれを行う方法を説明できますか?これがフォームページ(index.html.erb)です

<%= form_tag("lookup/show", :method => "get") do %>
    <%= label_tag(:q, "Pub Year :") %>
    <%= collection_select(:lookup, :pubyear, @pubyears, :pubyear, :pubyear) %>
    <%= submit_tag("Find") %>
<% end %>

これがLookupコントローラーからのshowメソッドです

def show
    @lookuprows = Lookup.return_lookup_row(params[:lookup][pubyear])

    respond_to do |format|
       format.html
    end
end

これが、結果が現在表示されているshow.html.erbページです。

<tbody class="lkuptbody">
    <% @lookuprows.each do |lkup| %>
       <tr class="lkuprow">
         <td><input type="text" class="lkupcode" value=<%= lkup.codetype %> /></td>
         <td><input type="text" class="lkupdesc" value=<%= lkup.codedesc %> /></td>
         <td><input type="text" class="lkuprmks" value=<%= lkup.rermark %> /></td>
       </tr>
</tbody>

部分的な_show.html.erbを作成する必要があることは理解していますが、フォームページ(index.html.erb)からそれを参照するにはどうすればよいですか?

ありがとう

4

2 に答える 2

3

結果を同じページのフォームの下に表示する場合、フォームは結果をindexアクションではなくアクションに送信する必要がありますshow

<%= form_tag("lookup", :method => "get") do %>
  <%= label_tag(:q, "Pub Year :") %>
  <%= collection_select(:lookup, :pubyear, @pubyears, :pubyear, :pubyear) %>
  <%= submit_tag("Find") %>
<% end %>

そしてあなたのLookupControllerで:

def index
  @lookuprows = Lookup.return_lookup_row(params[:lookup][pubyear]) unless params[:lookup].nil?
  ...
end

次に、ブロックでラップされたフォーム(index.html.erb内)の下のショーページにテーブルHTMLを追加して、がnilifの場合を除外します。@lookuprows

<% if @lookuprows %>
  <tbody class="lkuptbody">
    <% @lookuprows.each do |lkup| %>
      <tr class="lkuprow">
        <td><input type="text" class="lkupcode" value=<%= lkup.codetype %> /></td>
        <td><input type="text" class="lkupdesc" value=<%= lkup.codedesc %> /></td>
        <td><input type="text" class="lkuprmks" value=<%= lkup.rermark %> /></td>
      </tr>
    <% end %>
  </tbody>
<% end %>

これにより、結果が@lookuprowsあれば表として表示され、ない場合は表が表示されません。

ビューをクリーンアップするために、そのテーブルHTMLを別のパーシャルに配置することもできますが、それはあなたが尋ねた問題にとって必須ではありません。

お役に立てば幸いです。

于 2012-10-04T02:09:47.933 に答える
1

ページの再読み込みを避けてフォームの下に配置しますか?ajaxでそれを行う方法は次のとおりです。

Index.html.erb。

<%= form_tag("lookup/show", :method => "get", :data => {:remote => true, :type => "html"}, :id => "lookup_form") do %>
  <%= collection_select(:lookup, :pubyear, @pubyears, :pubyear, :pubyear, id: 'lookup_show_select') %>
   <%# Add More fields here %>
  <%= submit_tag "Submit" %>
<% end %>
<div id='lookup_show_result'></div>

app / Assets/lookup.js.coffee内。Coffeescriptを使用しない場合は、JSに簡単に翻訳できます。質問してください。

$ ->
  $(document).on 'ajax:success', '#lookup_form', (evt, data) ->
    $('#lookup_show_result').html(data)

コントローラは変更されていません。すべてのパラメータに従ってリクエストを処理するだけです。

これは最小限のテストされていないバージョンです、あなたが立ち往生しているかどうか教えてください

ちなみに、私はここでjQueryを使用してRailsのUJS実装を拡張し、ajaxを使用して標準の更新/削除などを簡単にするgemの開発を開始しています: jQuery UJS extended

于 2012-10-04T02:14:50.097 に答える