Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用mongoid的字段嵌入许多嵌套文档_Javascript_Mongodb_Ruby On Rails 3.1_Mongoid - Fatal编程技术网

Javascript 使用mongoid的字段嵌入许多嵌套文档

Javascript 使用mongoid的字段嵌入许多嵌套文档,javascript,mongodb,ruby-on-rails-3.1,mongoid,Javascript,Mongodb,Ruby On Rails 3.1,Mongoid,试图将此railscast用作指南: 遇到这个错误: `@search[queries_attributes][new_queries][queries' is not allowed as an instance variable name 型号: #search.rb class Search include Mongoid::Document include Mongoid::Timestamps belongs_to :user field :name,

试图将此railscast用作指南:

遇到这个错误:

`@search[queries_attributes][new_queries][queries' is not allowed as an instance variable name
型号:

#search.rb
class Search
  include Mongoid::Document
  include Mongoid::Timestamps


  belongs_to :user
  field :name,              :type => String

  embeds_many :queries
  accepts_nested_attributes_for :queries, :reject_if => lambda { |a| a[:content].blank? }, :allow_destroy => true

#query.rb
class Query
  include Mongoid::Document

  field :columns,           :type => String
  field :types,             :type => String
  field :keywords,          :type => String

  embedded_in :search, :inverse_of => :queries 

end
搜索控制器:

def new
  @search = Search.new
  @search.queries.build
  #3.times { @search.queries.build }
end
_form.html.haml部分:

= form_for(@search) do |f|
  = f.label 'Name this search'
  = f.text_field :name, :class => 'text_field'
  = render :partial => 'query', :collection => @search.queries, :locals => { :f => f }
  = link_to_add_fields "Add Query", f, :queries 

  .actions
    = f.submit
.fields
  = f.fields_for "queries[]", query do |q|

    = q.label 'Search Datatype'
    = q.select :types, Query::TYPES

    = q.label 'In Column'
    = q.select :columns, @search.record_columns

    = q.label 'For Keywords:'
    = q.text_field :keywords, :class => 'text_field'

    = q.hidden_field :_destroy 
    = link_to_function "remove", "remove_fields(this)" 
_query.html.haml部分:

= form_for(@search) do |f|
  = f.label 'Name this search'
  = f.text_field :name, :class => 'text_field'
  = render :partial => 'query', :collection => @search.queries, :locals => { :f => f }
  = link_to_add_fields "Add Query", f, :queries 

  .actions
    = f.submit
.fields
  = f.fields_for "queries[]", query do |q|

    = q.label 'Search Datatype'
    = q.select :types, Query::TYPES

    = q.label 'In Column'
    = q.select :columns, @search.record_columns

    = q.label 'For Keywords:'
    = q.text_field :keywords, :class => 'text_field'

    = q.hidden_field :_destroy 
    = link_to_function "remove", "remove_fields(this)" 
搜索帮助程序:

module SearchesHelper

    def link_to_add_fields(name, f, association)
      new_object = f.object.class.reflect_on_association(association).klass.new
      fields = f.fields_for(association, new_object, :child_index => "new_#{association}") do |builder|
        render(association.to_s.singularize , :f => builder)
      end
      link_to_function(name, h("add_fields(this, \"#{association}\", \"#{escape_javascript(fields)}\")"))
    end

end
javascript:

function remove_fields(link) {
        $(link).prev("input[type=hidden]").val("1");
        $(link).closest(".fields").hide();
}

function add_fields(link, association, content) {
        var new_id = new Date().getTime();
        var regexp = new RegExp("new_" + association, "g");
        $(link).parent().before(content.replace(regexp, new_id));
}
当线路:

= link_to_add_fields "Add Query", f, :queries
如果被注释掉,它将按预期工作,但我需要能够添加其他查询 通过这个助手。 对于测试多个查询,我将触发控制器中的创建3.5次

在错误消息中,最后一个“]”也被删除。。不知道我错过了什么

对不起,所有的标签,但不确定问题出在哪里

两个想法:

我会将查询类命名为其他名称,根据您指定的错误消息,它可能与mongoid中的某些内容冲突:

@search[querys\u attributes][new\u querys][querys'不允许作为实例变量名]

在谷歌上搜索你的问题时,我发现:


某些内容在不应为零的地方必须为零。

看起来这就是解决方案:

= f.fields_for :queries, query do |q|

调用方法
link\u to\u add\u fields
-->
form\u for->fields\u for(from function)->fields\u for(from partial)
时,为
调用嵌套了
fields\u。泰勒已经指出,可能会有命名冲突