选择下拉框选项时,自动提交AJAX表单的最简单,最优雅的方法是什么?我正在创建一个管理页面,管理员可以在其中修改用户权限("权限"存储为整数),我希望"权限"字段是一个下拉框,当管理员自动提交和更新时点击他希望用户拥有的选项.
这是我目前正在看的精简版.我需要知道将其转换为远程表单的最佳方法,该表单在单击选项时自动提交.
随意指出任何切向性的建议或其他任何东西......我对Rails相对较新,只是在我不能不经常引用他人工作的情况下才能编写代码.
<!-- This is the "index" view, by the way. -->
<% for membership in @story.memberships %>
<% form_for membership do |f| %>
<%= f.select :permissions, [['none', 0], ['admin', 9]] %>
<% end %>
<% end %>
Run Code Online (Sandbox Code Playgroud) 我正在使用Rails 4.2.3.我想在模态对话框中提交一个表单,所以我已经设置了我的表单
<%= form_for @my_object, :remote => true do |f| %>
Run Code Online (Sandbox Code Playgroud)
但是如果用户成功提交表单,我想重新加载调用模式对话框的页面,并注意"已成功保存".我无法弄清楚我需要在"format.js"中添加什么才能生成这发生了.到目前为止,这就是我在控制器中所拥有的......
def create
@my_object = MyObject.new(my_object_params)
@current_user = User.find(session["user_id"])
@my_object.user = @current_user
respond_to do |format|
if @my_object.save
format.html { redirect_to controller: "users", action: "index", notice: 'Saved successfully.' }
format.js { render action: ‘../users/index’, notice: ‘Saved Successfully’, location: @my_object }
else
format.html { render action: "index" }
format.js { render json: @my_object.errors, status: :unprocessable_entity }
end
end
end
Run Code Online (Sandbox Code Playgroud)
现在,当我尝试执行上述操作时,成功提交会导致500错误,抱怨缺少部分错误.无论如何,很确定我的错误.
我使用Rails 4,Turbolinks和一个远程表单有一个相当奇怪的问题.我的表格看起来像:
<%= form_for [object], remote: true do |f| %>
<td><%= f.text_field :name, class: 'form-control' %></td>
<td><%= f.email_field :email, class: 'form-control' %></td>
<td><%= f.submit button_name, class: 'btn btn-sm btn-primary' %></td>
<% end %>
Run Code Online (Sandbox Code Playgroud)
此表单添加(创建)一个新对象.但它确实不起作用:
当为此链接禁用Turbolink时,页面工作正常.
我有两个问题:
提前致谢.
解
感谢@ rich-peck,解决方案是添加一个javascript,点击按钮后手动提交表单:
<%= javascript_tag do %>
var id = "#<%= dom_id(f.object) %>";
var inputs = $(id).parent().find('input');
console.log(inputs);
$(id).parent().find('button').on('click', function(e) {
e.preventDefault();
$(id).append(inputs.clone());
$(id).submit();
});
<% end %>
Run Code Online (Sandbox Code Playgroud)
此代码将javascript添加到表单行,获取输入,将它们附加到ID并提交表单.preventDefault(); 防止在刷新页面并且表单实际工作时两次发送查询.
我使用简单的表单在rails 4中的远程表单有问题.当我在没有AJAX的情况下使用它时,它工作得很好但是只要我将远程设置为真正的rails就会抛出一个ActionDispatch::ParamsParser::ParseError说法unexpected token at 'utf8=%E2%9C%93&...'.
我不知道什么可能导致这个,但它可能是非常愚蠢的东西,因为我似乎是唯一拥有它的人:)
这是我正在使用的表单标签:
<%= simple_form_for @profile, remote: true, defaults: { wrapper_html: {:class => 'form-group'}, input_html: { :class => 'form-control' } } do |f| %>
Run Code Online (Sandbox Code Playgroud)
这是跟踪轨道返回给我:
actionpack (4.0.0) lib/action_dispatch/middleware/params_parser.rb:53:in `rescue in parse_formatted_parameters'
actionpack (4.0.0) lib/action_dispatch/middleware/params_parser.rb:32:in `parse_formatted_parameters'
actionpack (4.0.0) lib/action_dispatch/middleware/params_parser.rb:23:in `call'
actionpack (4.0.0) lib/action_dispatch/middleware/flash.rb:241:in `call'
rack (1.5.2) lib/rack/session/abstract/id.rb:225:in `context'
rack (1.5.2) lib/rack/session/abstract/id.rb:220:in `call'
actionpack (4.0.0) lib/action_dispatch/middleware/cookies.rb:486:in `call'
activerecord (4.0.0) lib/active_record/query_cache.rb:36:in `call'
activerecord (4.0.0) lib/active_record/connection_adapters/abstract/connection_pool.rb:626:in `call'
activerecord (4.0.0) lib/active_record/migration.rb:369:in `call'
actionpack (4.0.0) lib/action_dispatch/middleware/callbacks.rb:29:in `block in …Run Code Online (Sandbox Code Playgroud)