0

検索フォームを作りました

<%= form_tag url_for(:action => "index") do %>
    <%= text_field_tag 'fromdate' %>
    <%= text_field_tag 'todate' %>
    <%= submit_tag 'Search' %>
<% end %>

これらすべての値をコントローラーの単一のパラメーターとしてモデルに渡す必要があります。これは私のコントローラーです

def index
    @client = Customer.search
    #something like this @client = Customer.search(as_single_params)
    respond_to do |format|
        format.html
    end
  end

これどうやってするの?

4

2 に答える 2

2

ビューでこれを行うことができます:

<%= text_field_tag "some_fields[]" %>
<%= text_field_tag "some_fields[]" %>
<%= text_field_tag "some_fields[]" %>

次に、コントローラーで次を使用して値を取得するだけです。

some_fields = params[:some_fields] # this is an array

値をキーとして渡すと、Rails はハッシュを返します。

<%= text_field_tag "some_fields[fromdate]" %>
<%= text_field_tag "some_fields[todate]" %>

コントローラーでこれを行うことができます:

@clients = Customer.search(params[:some_fields])
       ^

条件に一致するクライアントがおそらく複数あるため、 stoを追加しました。@client

于 2013-08-29T11:59:16.310 に答える
0

paramsフォームを送信すると、選択したすべてのパラメーターがハッシュでコントローラーに渡されます。たとえば、params[:fromdate]params[:todate].

コントローラーで、paramsハッシュCustomerに検索対象のフィールドのみが含まれている場合 (つまり、フォームにCustomerフィールドのみが定義されている場合)、次のことができます。

def index
  @clients = Customer.where(params)
  respond_to do |format|
    format.html
  end
end

コレクションを返す@clientsので、私が示していることに注意してください。where次のようにして、最初のものを選択できます (特に、1 つしかないことが確実な場合)。

@client = Customer.where(params).try(:first) 
于 2013-08-29T12:02:07.980 に答える