如何在Rails中动态添加选择菜单选项

时间:2013-02-24 04:38:55

标签: jquery ruby-on-rails ruby-on-rails-3

有没有人知道是否有一个简单的解决方案可以动态地将新选项添加​​到Rails表单中的选择菜单中?

Dynamic Forms railscast(http://railscasts.com/episodes/403-dynamic-forms)专注于根据在另一个选择菜单中进行的选择动态过滤第二个selet菜单,这不是我想要的。我正在寻找一种解决方案,其中表单只包含一个选择菜单,并且可以在表单上添加新选项。

我觉得解决方案可能类似于嵌套模型表单railscast(http://railscasts.com/episodes/196-nested-model-form-revised)中所涉及的解决方案,但在该示例中,必须在数据库中更新值之前提交表单。我希望用户能够添加新的选择菜单选项,然后在提交之前继续使用表单的其余部分。

在此阶段,我还想避免使用railscast jquery自动完成解决方案,因为它使用文本字段而不是选择菜单。

目前我看到解决方案在选择菜单旁边有一个“添加新”按钮。单击该按钮时,将打开一个模式,允许用户输入新的选择菜单选项,然后保存(更新数据库),关闭模式并更新表单。我只是想知道现有的优雅解决方案是否已经存在。

非常感谢任何帮助。

感谢。

更新:

我还没有创建任何代码来实现它,但这是我的表单:

<%= simple_form_for @other, :html => { :class => 'form-horizontal' } do |f| %>  
<fieldset>
  <%= f.error_notification %>           
  <%= f.association :other_type, :include_blank => false %>      
  <%= f.input :cost%>
  <%= f.input :invoice %>             
  <%= f.input :notes, :input_html => {:class => "row-fluid"} %>
<%= f.error :base %>
<div id="eze_form_actions" class="form-actions">
  <%= f.submit nil, :class => 'btn btn-primary' %>
  <%= link_to 'Cancel', others_path, :class => 'btn' %>
</div>
</fieldset>    
<% end %>

1 个答案:

答案 0 :(得分:1)

我在CMS的类别中做了类似的事情,用户可以轻松添加新类别,我们POST到服务器,服务器响应HTML(通过部分渲染),然后将其注入我们的复选框中。您可以轻松复制此内容:

要实现这一点,您需要一个表单,一个端点和一些javascript:

<强>表格

不确定您的表单是什么,但请使用常规表单助手,并确保表单设置为remote: true

终点

你的端点应该呈现一个部分,它应该只包含我们将呈现给字符串的html的html并传回给要添加的前端。

def endpoint
  # create your new model with the params
  @model = Model.create(some: attribute)
  if @model.errors.empty and @model.save
    render json: { html: render_to_string(partial: "path/to/partial", locals: { model: @model })
  end
end

** JavaScript **

$(form)
  .bind('ajax:success', function(data, status) {
    $(select).append(status.html)
  })

status.html应该类似于<option>...</option>,因此我们只需附加到我们的选择。

如果这没有意义,请告诉我。我希望它有所帮助。