【问题标题】:Rails/JS button onclick to re-render partial without entering into DBRails/JS 按钮 onclick 重新渲染部分而不进入数据库
【发布时间】:2017-02-24 16:15:58
【问题描述】:

我希望使用按钮(添加)重新加载部分表单。我是新手,不知道如何简单地在部分列表中显示字段,就像列表一样多次单击添加按钮。我找不到相关的例子。当对象保存在数据库中时,所有 AJAX 示例都提到 js.erb。

<div class="panel-body">
 <%= render partial: "degrees/form", :locals => { :f => f }  %> 
 <%= f.link_to (fa_icon 'plus').to_s + " Add Another Qualification ", render(:partial => 'degrees/form', :locals => { :f => f }), class: "btn btn-primary" %>
</div>

这里,@application 是尝试显示学位字段的主要表单。部分只是两个文本字段 - 一个用于选择教育程度,第二个用于详细信息。这里是部分

 <%= f.fields_for [Degree.new], :url => { :action => "index" } do |ff| %>
  <div class = "form-group" }>
    <%= ff.select :level, options_for_select(Job::EDUCATION, params[:level]), include_blank: "Select Degree", class: 'span-2' %>
    <%= ff.text_field :description, :class => 'span5' %>
  </div>
   <% ff.submit "Add Another Degree", class: 'btn btn-primary' %>

【问题讨论】:

标签: javascript jquery ruby-on-rails


【解决方案1】:

你不需要保存东西来传递给.js.erb...你可以实例化...

但是,如果您的示例是精确的,则您缺少链接的 remote: true 标志...并且部分未在链接上定义...您需要创建一个响应 ajax 的视图...

表格示例

<div class="panel-body">
  <%= link_to new_thing_path, remote: true do %>
    <i class="fa fa-plus">
    Add another qualification
  <% end %>
  <div class="new-things-container">
  </div>
</div>

控制器响应 ajax 请求

class ThingsController < ApplicationController
  def new
    @thing = Thing.new

    respond_with @thing
  end
end

查看 ajax 请求,在指定的 div 中呈现部分内容

//views/things/new.js.erb
$('.panel-body .new-things-controller').append("<%= render partial: 'degrees/form', locals: { thing: @thing } %>")

【讨论】:

  • 好的,所以在显示部分字段时出现错误,因为部分字段实际上是 fields_for 将 locals 作为 f。它在控制台上抛出的错误是:ActionView::Template::Error (undefined local variable or method `f' for #):。你能告诉我如何解决本地'f'吗?
  • 所以...这是个错误的问题...f 是什么?是form_for 助手吗?你不能把它传递出去......它不是一个存在于它的 Helper 块之外的@object......如果你打算它是 @object 的一个属性,你用......你需要通过@object.attribute,而不是 f.input :attribute
  • 提示:要呈现独立于 form_for... 的输入,您应该使用 FormTagHelpers 而不是 FormHelpers api.rubyonrails.org/classes/ActionView/Helpers/…
  • 对不起,正忙着做点什么,要睡觉了。明天我会再看一遍,但我不明白如何传递@object.attribute。实际上,我希望您意识到实际上 @object(@application) 只是被创建但还没有 id,所以当我调用 partial 时,它希望找到那个对象。我只见过传递 locals{ 的语法。 :f=>f } 但不确定呈现形式的另一种属性语法。是的,您在 js.erb-> 'new-things-controller' 中的代码中有一点错字必须是 '.new-things-container'。感谢您的帮助。请留下你的cmets,我会回复你的。
  • 好的...如果可能,编辑您的问题以显示整个表格...或表格声明和相关部分(如果太大)...我想查看提到的模板部分太......我不确定我是否理解你的问题......或者如果我理解了它没有意义
猜你喜欢
  • 1970-01-01
  • 2011-09-06
  • 1970-01-01
  • 2011-12-17
  • 2018-03-09
  • 1970-01-01
  • 1970-01-01
  • 2017-05-07
  • 2017-06-01
相关资源
最近更新 更多