Ruby on Rails与新视图和编辑视图之间的_form冲突

时间:2012-12-27 03:43:59

标签: ruby-on-rails drop-down-menu

这是我的问题。假设我的域名包含两个模型,工厂和工人。现在,当用户在_form视图中创建Worker时,他们必须选择Factory。为此,提供了基于工作者状态的工厂列表,并且只要工作人员的状态发生变化,就会通过JS更改下拉列表的内容。这就像一个魅力。

但是,在编辑用户时,我似乎陷入了填充和自动选择工人工厂的可接受方式。对于编辑视图,似乎指定了options_for_select的select标记是要走的路。不幸的是,这在添加新Worker时会破坏我的_form视图,因为它们没有可以填充集合的状态。

TL; DR我可以使用JS在新的_form视图中填充下拉列表,同样的范例不能与edit _form一起使用,因为我必须根据当前Factory和Worker的状态预先填充下拉列表。

非常感谢任何帮助。

编辑:工厂下拉列表由ajax查询填充,该查询将选定状态传递给控制器​​,以找出哪些工厂处于该状态。

$(document).ready(function(){
  $('.new-contact-select-state select').change(function() {
    var selected_state = $(this).val();
    $.ajax({
      type: 'POST',
      url:  '/factories/get_state_factories.json',
      data: 'state='+selected_state,
      success: function(msg){
  if(msg == 0) {
    //Query returned empty.
    } else {
    //Query Has values.
    var $el = $('.select-state-firm select');
    $el.empty(); // remove old options
    $.each(msg, function(key, value) {
    var firmname = value.firm_name;
    var firm_id = value.id;
    $el.append($("<option></option>").attr("value", firm_id).text(firmname));
});

在我尚未煮熟的控制器中,下拉列表会被这样的查询填充。

@state_factories = Factory.includes(:address).where(:addresses => {:state => state})

我是一个Ruby noob,所以这一切都不会起作用,我只是想调和创建视图和编辑视图之间下拉列表中数据填充的差异。我最终可能只创建两个_forms。

1 个答案:

答案 0 :(得分:1)

我理解问题是,在创建新工作程序时呈现工作表单时会出现错误,因为新工作程序没有可以预先填充下拉列表的状态。

如果这是问题,那么您可以使用@worker.new_record?来测试@worker是否是新记录,如果是,那么您可以渲染工厂选择框,除了提示告诉我没有选项用户首先选择一个州。