所以我刚开始使用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成功加载页面。 但我想在没有布局的情况下加载它。这可能吗? 我是否需要创建一个呈现部分表单并且没有布局的新操作?
答案 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,因为我不在这种情况下;你应该对返回的内容采取适当的行动。但有些人可能认为这是一种不好的形式,但是,返回其他东西而不是技术要求。)