Ruby on rails Rails-包括新对象形式中的搜索字段

Ruby on rails Rails-包括新对象形式中的搜索字段,ruby-on-rails,forms,ruby-on-rails-4,Ruby On Rails,Forms,Ruby On Rails 4,我有用户和书籍-用户可以是书籍的贡献者 User has_many :contributions Book has_many :contributions Contribution belongs_to :user, belongs_to :book 我有一个新的贡献表单-/contributions/new.html.erb和一个问题:我想为用户使用一个搜索字段,但搜索字段的submit_标记正在提交整个表单。下面是我的代码。如何使search submit_标记仅在搜索字段上运行 <

我有用户和书籍-用户可以是书籍的贡献者

User has_many :contributions
Book has_many :contributions
Contribution belongs_to :user, belongs_to :book
我有一个新的贡献表单-/contributions/new.html.erb和一个问题:我想为用户使用一个搜索字段,但搜索字段的submit_标记正在提交整个表单。下面是我的代码。如何使search submit_标记仅在搜索字段上运行

<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 %>`
新贡献
禁止保存此贡献:

零%>
`
表格

您之所以“提交整个表单”是因为

每当您“提交”表单时,它都会使用其父
标记中的元数据将您的数据发送到服务器端点。您的问题是,您试图在表单中创建一个表单,这根本不起作用

解决方案是使用
Ajax
分别处理
搜索
功能:


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 %>
这将允许您在页面加载的范围内,绕过HTML表单问题,从而为您提供所需的功能


更新

路径问题将由我对可能不存在的路径的引用引起。您必须使用以下各项:

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

如果您这样做&让我知道
rake routes
的结果,我将在一个更可靠的位置帮助您

为什么要将搜索字段放在创建贡献表单中?你在搜索什么?嗨,里奇-非常感谢你的帮助。正如你可能已经暗示的,我在这里有点不知所措。我已经添加了您建议的代码,并且在视图的第二行出现了一个错误-未定义的NameError:local变量或方法'contributions\u search\u path'。我已经编辑了这一行,内容是“链接到”搜索“,贡献搜索路径,id:“搜索提交”-我认为这可能是问题所在,但没有用-我的路线中有作为资源列出的贡献,我应该在那里添加一些内容吗?非常感谢巴德,谢谢你让我知道!问题是,我为您创建了一个占位符路线-让我更新答案以反映您需要查看的内容-可能值得一提的是,我还没有添加//do something元素,只是调用警报来显示它正在工作。-搜索路线是search\u contributions GET/contributions/search(:format)事实上,我错了。我认为这个问题已经解决了,下一个问题与此无关,因此我关闭了此功能,但我认为我仍然存在一个修补问题-但是考虑到您的答案是在表单中提交搜索而不提交表单的问题,我将关闭此功能-感谢您的帮助:)
#config/routes.rb
resources :contributions
   get :search, on: :collection
end