看起来您正在寻找 AJAX 表单。在 Rails 中,您可以使用 form_for ... remote:true 生成它。这可以在不刷新页面的情况下调用控制器方法。然后你可以返回一个响应并使用 JS 来更新用户所在的页面。
例如,在你看来
<div class="hidden">
<%= from_for @category, remote:true %>
Your form here
<% end %>
</div>
添加一些 JavaScript 以在单击按钮时取消隐藏表单。在你的控制器中
def create
#normal create stuff
if save
respond_to do |f|
f.js
f.html {#re render page just in case JavaScript is disabled}
end
else
#handle error
end
end
使用 rails 默认的 f.js,Rails 将调用一个文件 create.js.erb,该文件将有权访问您创建的任何公共变量,例如 @category。
然后你可以按照
的方式做一些事情
$('.append_category').append('<%= j render 'your category layout partial', locals: { category: @category }%>');
或者如果您只需要类别链接
$('.append_category').append('<%= link_to @category %>');
一个非常好的指南可以在这里找到http://guides.rubyonrails.org/working_with_javascript_in_rails.html
注意:根据您的 rails 版本,您可能需要将 include ActionController::MimeResponds 添加到您的 application_controller.rb(我知道 rails 5 需要这样做)