1

因此,我是 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 成功加载了页面。但我想在没有布局的情况下加载它。这可能吗?我是否需要创建一个呈现部分表单且没有布局的新操作?

4

2 回答 2

1

您可以在操作中使用以下内容。让你的动作焕然一新。

def new
 #your code goes here
 render :layout => false
end
于 2013-06-28T05:17:44.200 回答
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,因为在这种情况下我不需要;这取决于您对返回的内容采取适当的措施。但是,有些人可能认为返回其他内容是错误的形式比技术要求的要高。)

于 2013-06-28T05:33:41.523 回答