2014-09-01 1 views
0

사용자 및 도서 보유 - 사용자는도 서에 대한 기여자가 될 수 있습니다. 나는 사용자의 검색 필드를 사용하기를 원하지만 검색 필드에 대한 submit_tag 전체 양식을 제출된다 /contributions/new.html.erb과 문제 - 레일 - 새 개체 양식의 검색 필드 포함

User has_many :contributions 
Book has_many :contributions 
Contribution belongs_to :user, belongs_to :book 

나는 새로운 기부 형태를 갖는다. 내가 가지고있는 코드는 아래와 같습니다. 검색 필드에서 검색을 수행하려면 submit_tag를 어떻게 만듭니 까? 당신이 양식을 "제출"할 때마다, 부모 <form>에 메타 데이터를 사용하기 때문에 how HTML handles forms

<h1>New contribution</h1> 

<%= form_for(@contribution) do |f| %> 
    <% if @contribution.errors.any? %> 
    <div id="error_explanation"> 
     <h2><%= pluralize(@contribution.errors.count, "error") %> prohibited this contribution from being saved:</h2> 

     <ul> 
     <% @contribution.errors.full_messages.each do |message| %> 
     <li><%= message %></li> 
     <% end %> 
     </ul> 
    </div> 
    <% end %> 

    <div class="field"> 
    <%= f.select :contribtype, options_for_select(Contribution::CONTRIB_TYPES) %> 
    </div> 

    <div class="field"> 
    <%= f.label :user_id %><br> 
    <%= text_field_tag :search, params[:search] %> 
    <%= submit_tag "Search", :name => nil %> 
    <% if @users %> 
     <% @users.each do |user| %> 
     <%= render partial: 'layouts/bookshelf', locals: {user: user} %> 
     <% end %> 
    <% end %> 
    </div> 

    <div class="field"> 
    <%= f.label :book_id %><br> 
    <%= f.number_field :book_id %> 
    </div> 
    <div class="actions"> 
    <%= f.submit %> 
    </div> 
<% end %>` 
+0

검색 기여 양식에 검색 필드를 넣는 이유는 무엇입니까? 그게 뭘 찾는거야? – Thanh

답변

1

양식

는 "전체 양식을 제출"하고 그 이유는 태그를 사용하여 서버 엔드 포인트에 데이터를 보냅니다.


: 당신이 문제는 단순히

이 솔루션은 별도로 search 기능을 처리 할 수 ​​Ajax을 사용하는 것입니다 작동하지 않습니다 형태, 내 폼을 만들려고한다는 것입니다 아약스

#your_form 
<%= form_for(@contribution) do |f| %> 
    ... 
    <%= text_field_tag :search, params[:search], id: "search" %> 
    <%= link_to "Search", contribution_search_path, it: "search_submit" %> 
    ... 
<% end %> 

당신은 원격 아약스 요청으로 링크를 "검색"스타일을해야합니다 - 당신은 당신의 서버에 PARAMS을 보낼 수 있도록 :

#app/assets/javascripts/application.js.erb 
$(document).on("click", "a#search_submit", function(){ 
    $.ajax({ 
     url: $(this).attr("href"), 
     data: {query: $("#search").val() }, 
     success: function(data) { 
     // do what you want here 
     } 
    }); 
}); 

이것은 당신이


업데이트

필요한 HTML 양식의 문제를 무시하고 페이지 로딩의 범위에 process the "search" request asynchronously에 당신을 허용하고, 결과적으로 기능을 함께 제공합니다 존재하지 않는 경로에 대한 내 참조로 인해 경로 문제가 발생합니다. 다음 사용해야합니다 :이 & 날 rake routes의 결과를 알려 경우

#config/routes.rb 
resources :contributions 
    get :search, on: :collection 
end 

, 난 당신을 도울 수있는 훨씬 더 강력한 위치에있을거야!

+0

안녕하세요 -이 덕분에 대단히 감사합니다. 당신이 암시했을지도 모르는 것에 따라, 나는 약간의 나의 깊이에서 여기에있다. 내가 제안한 코드를 추가했고, 뷰의 두 번째 줄에 오류가 나타납니다. - 정의되지 않은 NameError : 지역 변수 또는 메소드'contributions_search_path '. "link_to"Search ", contributions_search_path, id :"search_submit "을 읽으려고 줄을 편집했습니다. 문제가 될 수 있지만 아무런 도움이되지 않는다고 생각합니다. - 경로에 리소스로 나열된 컨트 리뷰 션이 있습니다. 그곳에? 많은 감사 – RADan

+0

헤이 버드, 알려 줘서 고마워! 문제는 내가 당신을위한 자리 표시 자로 경로를 만든 것입니다 - 당신이보아야 할 것을 반영하기 위해 답을 업데이트하겠습니다. –

+0

- 언급할만한 가치가 있습니다. // 뭔가를 아직하지 않았습니다. 그것이 작동 중임을 알리는 경고를하는 것보다. – RADan