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