没有布局的表单中的Ajax表单

时间:2013-06-28 04:45:15

标签: ruby-on-rails ruby-on-rails-4

所以我刚开始使用rails并且遇到一些麻烦我的情况是我有一个产品型号附带了一些图像。我希望在我的产品页面上有一个按钮,通过ajax创建一个新图像。

在我的产品_form视图中我有:

<%= simple_form_for(@product) do |f| %>
<%= f.error_notification %>
<div class="inputs">
<%= f.input :name %>
<%= f.input :description, :input_html => {:class => "wysihtml5 span6", :style => "height:400px;"} %>
<%= f.association :images, label_method: :name, value_method: :id %>
<h4>Upload new file</h4>
</div>
<%= link_to 'Add Image', '/images/new', :remote => true, :"data-replace" => "#image-form" %>
<div id="image-form">
</div>
<div class="actions">
  <%= f.button :submit %>
</div>
<% end %>

它确实通过ajax成功加载页面。 但我想在没有布局的情况下加载它。这可能吗? 我是否需要创建一个呈现部分表单并且没有布局的新操作?

2 个答案:

答案 0 :(得分:1)

您可以在操作中使用以下内容。让你的行动是新的。

def new
 #your code goes here
 render :layout => false
end

答案 1 :(得分:1)

所以我假设你要求并返回html而不是js?我对此有几点想法:

如果您只需要从AJAX请求返回此请求,那么您可以简单地告诉控制器始终render layout: false

如果您希望允许控制器有时返回整页,您可以接受get请求中的参数并相应地更改输出,或者您可以告诉控制器:

respond_to do |format|
  format.html # will render default with no block passed
  format.js { render layout: false }
end

这应该只适用于您表单中的代码,因为:remote => true告诉控制器尽可能返回js,但是从浏览器访问images / new会请求html。 (请求js并不意味着你实际上必须返回js,因为我不在这种情况下;你应该对返回的内容采取适当的行动。但有些人可能认为这是一种不好的形式,但是,返回其他东西而不是技术要求。)