- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我努力将其消化成一个标题。
我正在使用 SimpleForm 构建一个包含一个或多个字段集的批量编辑页面 - 一个用于已构建但尚未保存的 ActiveRecord 模型集合中的每条记录。
我的表单如下所示:
= simple_form_for :courses, method: :patch do |f|
- @courses.each do |course|
= field_set_tag do
= f.simple_fields_for 'courses[]', course do |c|
= c.input :title
.row
.medium-6.columns
= c.input :start_date, as: :string, input_html: { class: 'input-datepicker' }
.medium-6.columns
= c.input :end_date, as: :string, input_html: { class: 'input-datepicker' }
= f.submit 'Save', class: 'primary button'
一条记录的参数散列如下所示:
"courses"=>{"courses"=>[{"title"=>"Course Y", "start_date"=>"2017-09-26", "end_date"=>"2017-07-31"}]}
有一个数组,而对于两条记录,它看起来像这样:
"courses"=>{"courses"=>{"1"=>{"title"=>"Course X", "start_date"=>"2018-01-16", "end_date"=>"2018-07-30"}, "2"=>{"title"=>"Course Y", "start_date"=>"2017-09-26", "end_date"=>"2018-07-30"}}}
使用字符串整数键哈希。
当我尝试使用强参数时,这就成了一个问题。经过多次黑客攻击,我最终得到了这段代码,它适用于多条记录,但在仅提交一条记录时失败:
ActionController::Parameters
.new(courses: params[:courses][:courses].values)
.permit(courses: [:title, :start_date, :end_date])
.require(:courses)
失败并显示 param 丢失或值为空:courses
突出显示上面的 .require(:courses)
行。
通过协调单记录案例与多记录案例“解决”了这个问题:
if params[:courses][:courses].is_a?(Array)
params[:courses][:courses] = { '1': params[:courses][:courses][0] }
end
但感觉应该有更简单的方法。
有没有更好的方法来为这个用例编写表单?我是否错过了具有强参数的技巧?
我正在使用 rails 5.0.5
和 simple_form 3.5.0
。
最佳答案
"but it feels like there should be a simpler way of doing it."
是的,使用 ajax 发送单独的创建/更新请求。这可以对用户透明地完成,并提供更简单的代码和更好的用户体验。
Rails 具有 fields_for
和 accepts_nested_attributes
,可用于在单个请求中创建/更新多个子记录和父记录。但它确实需要一个将记录分组在一起的关联,即使这样在验证方面也会变得非常棘手和复杂。
您想对其进行设置,以便每条记录都有一个单独的表格:
- courses.each do |c|
= render partial: 'courses/_form', course: c
表单实际上没有任何内容:
# courses/_form.haml.erb
= simple_form_for course, remote: true, html: { 'data-type' => 'json', class: 'course_form'} do |f|
= c.input :title
.row
.medium-6.columns
= c.input :start_date, as: :string, input_html: { class: 'input-datepicker' }
.medium-6.columns
= c.input :end_date, as: :string, input_html: { class: 'input-datepicker' }
= f.submit 'Save', class: 'primary button'
我们不使用 js.erb
模板,而是使用 'data-type' => 'json'
并编写我们自己的处理程序,因为它更容易定位正确的表单:
$(document).on('ajax:success', '.course_form', function(event, xhr, status){
var $form = $(this);
alert('Course created');
if (this.method.post) {
// changes form to update instead.
this.method = 'patch';
this.action = xhr.getResponseHeader('Location');
}
});
$(document).on('ajax:error', '.course_form', function(event, xhr, status){
var $form = $(this);
// @todo display errors
});
创建 Controller 非常简单:
class CoursesController
def create
@course = Course.new(course_params)
respond_to do |format|
if @course.save(course_params)
format.json { head :created, location: @course }
else
format.json do
render json: {
errors: @course.errors.full_messages
}
end
end
end
end
def update
@course = Course.find(params[:id])
respond_to do |format|
if @course.update(course_params)
format.json { head :ok }
else
render json: {
errors: @course.errors.full_messages
}
end
end
end
end
关于ruby-on-rails - 来自具有多个记录的 SimpleForm 的参数散列对于一个记录的结构与两个记录的结构不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47164418/
我想隐藏标题开始一个新组。我通过将 visible 设置为 false 来尝试它,并尝试添加自定义 CSS 类。它不起作用。如何在 SimpleForm 中隐藏组标题。 谢谢。 最佳答案 在维护具有控
作为 Storybook 的忠实粉丝,我喜欢在 Isolation 中测试我的组件。 特别是表格。 但是,我很难弄清楚如何才能让我的表单甚至单个表单域独立工作。 (没有编辑、创建、资源和管理包装一切)
我在表格中使用 gem simpleform 我想调整简单表单的每个表单元素的宽度,我可以这样做吗? 我尝试了以下但它似乎不起作用 { :size => 10, :maxlength =>
有没有办法在simple_form View 中显示多态关联? 到目前为止,我得到了以下信息: = simple_form_for(@chat, :html => { :class => "form-
我正在使用 SimpleForm + Bootstrap。如何向所有 type="text" 添加属性输入类 = span12 ? 输出这样的东西: 我试着玩 config.wrappers但是这个
我想在 SimpleForm gem 的帮助下创建的表单上设置输入的 maxlength html 属性。我知道我可以通过在创建表单时手动传入 maxlength 属性来做到这一点,例如: 但这不是
我已经使用 Rails Rails 3.2.12 和 Ruby 2.0.0p0 从我的 Gemfile 中注释掉 gem 'simple_form'。当我执行 rails generate scaff
我想建一个select来自数组(而不是模型集合)的输入,使用 SimpleForm,并且每个 option 都有不同的类s。 我希望这会奏效: f.input :method, collection:
给定一个自定义的 SimpleForm 输入 class MyCustomInput 或 但这不是我要找的。 有没有一种方法可以配置输入,以便默认没有包装器? 最佳答案 除了您在问题中已经提到的选
高度以英寸为单位存储在数据库中。 然而,英尺和英寸需要自己单独的输入形式: Height: [_______] feet [_______] inches 所以我使用了虚拟属性,并让它工作。这是我的模
使用 simple_form gem 和rails,我尝试仅通过按回车键来提交text_area(评论框)。 Facebook 有类似的功能,这就是我的目标。在线研究并没有产生太多成果,而且我对 Ja
我有这段代码: = f.input :category, :as => :select, :label => false, :collection => Choices["Categories"] C
是否可以在没有模型的情况下使用简单表单(由 Plataformatec 提供)? https://github.com/plataformatec/simple_form 最佳答案 您可以使用 :sy
我努力将其消化成一个标题。 我正在使用 SimpleForm 构建一个包含一个或多个字段集的批量编辑页面 - 一个用于已构建但尚未保存的 ActiveRecord 模型集合中的每条记录。 我的表单如下
我使用 simple_form gem 和我有以下代码: = f.label f.object.name 其中 f 是通过 simple_form_for(...) do |f| 创建的 simple
我们有一个模型“EventSession”,它通过 STI 具有多个子类型,包括“NetworkingEventSession”和“DiningEventSession”……在某些情况下,我们希望能够
我有一个使用简单形式的普通形式。现在我想添加一个在模型中没有任何对应字段的输入,它将由 Controller 处理。我试过了 但这给出了一个 Method not found: a
是否可以禁用 AOR SimpleForm 组件的自动完成功能? 我尝试了以下各种组合: 但似乎没有任何效果。 它可以以这种方式定制还是需要创建自己的组件? 我需要它专门用于 AOR(不是 reac
我想在编辑和显示页面上的 React-admin 项目上创建自定义两列网格布局。我想仅使用一个 在左列上显示选择框和图像上传区域,并在右列上显示文本输入. Simply like this 如果我使
我想弄清楚如何设置由 SimpleForm 生成的选择框的选定选项.我的代码是这样的: 当然是default: 1部分不起作用。 TIA 最佳答案 使用以下内容: selected: 1 关于
我是一名优秀的程序员,十分优秀!