代码之家  ›  专栏  ›  技术社区  ›  dharga

用select在rails中得到一个奇怪的nil

  •  0
  • dharga  · 技术社区  · 15 年前

    我对下面的代码有一个奇怪的零问题。

    视图(部分视图):

    <p>
      <%= label :maintenance, :name %>
      <%= text_field(:maintenance, :name, :size => 20) %>
    </p>
    <p>
      <%= label :maintenance, :type %>
      <%= select :maintenance, :type, @m_types  %>
    </p>
    

    如果删除文本字段或将其移动到选择项下方,则在选择项中的:维护将得到零。

    控制器方法:

    def new
      @log = Log.new
      @maintenance = Maintenance.new
    
      @m_types = Maintenance.types
      @cars = Car.all
    
      print @maintenance
    
      if not params[:car].nil?
    @log.car = params[:car]
      end
    
      respond_to do |format|
        format.html # new.html.erb
        format.xml  { render :xml => @log }
      end
    end
    

    我假设它一定是一些奇怪的Ruby评估工具,但我不知道我在找什么。我用谷歌到处搜索,但不知道你在搜索什么,这很难做到。

    蒂亚!

    感谢所有帮助过我的人,但是我重构了我的模型,更改了我的继承列,它现在可以工作了。我认为问题在于我使用了:type作为继承列,所以当我在执行文本字段之前要求在select中设置:type时,它不知道我使用的是维护对象,它正在查找常规对象。任何普通的Ruby对象都会将:type字段用于其他内容。所以它在寻找:类型设置为一个模块,而不是像我试图做的那样设置为一个字符串。

    你可以看到我的新 setup 这是有效的。希望有人能从中吸取教训。

    1 回复  |  直到 15 年前
        1
  •  1
  •   bensie    15 年前

    我强烈建议您使用表单\ for方法声明表单。

    在您的情况下,您可以这样做(在您的视图中):

    form_for @maintenance do |f|
      f.label :name
      f.text_field :name
    end
    

    这将把表单变量附加到@maintenance的实例中。

    有关Rails中表单的详细信息,请参阅本指南。- Dealing with Model Objects in Forms