2013-12-11 3 views
0

저는 입력 텍스트 필드가있는 form_for가 있습니다. 입력 된 텍스트는 db에서 테이블을 검색하는 컨트롤러로 보내집니다.form_for를 사전 설정 입력으로 바꾸십시오.

하지만 텍스트 필드에 텍스트를 입력하는 대신 다른 것을하고 싶습니다. 기본 검색 쿼리를 만들고 싶습니다. 텍스트가있는 단추가되며 텍스트를 기반으로 매개 변수가 컨트롤러로 보내지고 검색이 수행됩니다.

어떻게하면됩니까? 나는 레일 4

내 때 form_tag를 사용하고 내가 무엇을 달성하고자하는

<%= form_tag pos_project(@project), method: :get do %> 
<p> 
<%= text_field_tag :query, params[:query] %> 
<%= submit_tag "Search", name: nil %> 
</p> 
<% end %> 

:

버튼 (단추 텍스트) -이 버튼을 클릭> MyButton에 , 텍스트 MyButton 것 컨트롤러로 보내지면 컨트롤러는 param을 취해 db 테이블을 쿼리하고 아래 쿼리를 사용하여 MyButton이라는 텍스트가 포함 된 결과를 표시합니다.

where("name @@ :q", q: query)

답변

0

당신을 누르면 어떤 버튼을 찾기 위해 매개 변수에서 "커밋"를 사용할 수 있습니다.

<!-- in your view --> 
<%= form_tag pos_project(@project), method: :get, id: "your_search_form" do %> 
<p> 
<%= hidden_field_tag :query, params[:query] %> 
<%= submit_tag "Search", name: nil %> 
</p> 

<% for value in your_preset_values do %> 
    <%= link_to(value, '#', data: { search_query_value: value }, class: "search-query-link") 
<% end %> 

그리고 당신의 coffee.js 파일 :

그래서 컨트롤러에서 당신은 HTML과 자바 스크립트 사용하지 왜

params[:commit]="button1" # or 
params[:commit]="button2" # or 
params[:commit]="button3" # based on which button you pressed 
1

을 얻을 것이다

# A class for the Search form JS 
class SearchForm 

    constructor: -> 
    # when a search query link is clicked... 
    $('a.search-query-link').click (e) -> 
     # find the value from the data attribute 
     searchQuery = $(this).data('search-query-value') 
     # assign the value to the hidden field 
     $("input[type='hidden']#query").val(searchQuery) 
     # optional - submit the form 
     $("#your_search_form")[0].submit() 


# Called when the document is loaded  
jQuery -> 
    new SearchForm() 
+0

감사합니다,하지만 일하지 않았고 페이지가 상쾌하게 멈추지 않았습니다. 내가 마지막으로 한 것은''%%%% link_to (value.name, '? utf8 = ✓ & query ='+ value.name) % ''좋은 접근 방식이 맞는지는 모르겠지만 그 일을합니다. – John

+0

왜 작동하지 않습니까? 무슨 문제 였어? – bodacious

+0

컨트롤러에 매개 변수를 보내지 않았습니다. – John