我一直在寻找解决方案,但这是不可能的。我希望它得到很好的解释。
我有一个带有小表单的用户列表来更改数据库中的一个属性(该属性是知道用户已经完成了签到)。
还有一个搜索器使用 AJAX 显示结果,这样所有页面都不会重新加载。当我第一次加载页面时,浏览器呈现 HTML,并且Save
按钮按预期工作。但是当我使用搜索器并出现列表(使用 JS)时,提交按钮不起作用。在 Mozilla Firefox 中什么都不做,在 Google Chrome 中我得到这个错误:No route matches "user's profile route"
. 搜索器工作正常(显示正确的用户)。我使用 Rails 3.0.1 和 Ruby 1.8.7
check_in.html.erb
这是搜索器和渲染调用
<%= form_tag({:controller => "admins", :action => "check_in"}, :id => "users_search", :method => "get", :html => {:autocomplete => "off"}) do %>
<%= hidden_field_tag :selected_event_id, params[:selected_event_id] %>
<p>
<%= text_field_tag :search, params[:search] %>
<%= submit_tag "Search", :name => nil %>
</p>
<% end %>
<div id="check_in"><%= render :partial => 'check_in' %></div>
_check_in.html.erb
这是上面渲染的部分
<%@event_user_infos.each do |user_info|subscription = Subscription.find(:first, :conditions => ["user_id = ? and event_id = ?", user_info.user_id, params[:selected_event_id]])%>
<%= simple_form_for(subscription) do |f| %>
<%= f.hidden_field :user_id %>
<%= f.hidden_field :event_id %>
<tr>
<td><%= link_to user_info.name, subscription %></td>
<td><%= user_info.company %></td>
<td><%= user_info.user.email %></td>
<td><%= subscription.networkId %></td>
<td><%= f.input :token, :input_html => { :size => 15, :maxlength => 15 }, :as => :integer, :label => false %></td>
<td width='5px'>
<%= f.submit 'save' %>
</td>
</tr>
<% end %>
<% end %>
admins_controller.rb
我只放了代码的相关部分
def check_in
event_id = params[:selected_event_id]
if !event_id.nil?
session[:event_id] = event_id
@event_user_infos = UserInfo.search(params[:search],event_id).order(sort_column + ' ' + sort_direction)
end
end
check_in.js.erb
$('#check_in').html('<%= escape_javascript(render :partial => 'check_in') %>');
编辑
我在部分表单中添加了一个条件:remote => remote
选项(如果有搜索remote == true
,如果没有remote == false
),谷歌浏览器中的错误消失了,但它仍然什么都不做(现在在两个浏览器中)。我还检查了 HTML 源代码,它似乎没问题。