2013-04-12 61 views
0

所以我在Rails中有一個表單,非常基本。但我決定添加一些功能。一點上下文。
你選擇你是男人還是女人,然後表單生成一些字段。我有一個已經存在於V1中的字段,但是當我使用JavaScript生成它時,它並未保存在數據庫中。我不明白爲什麼。這裏有一些代碼。保存在Rails的DB js生成的字段中

控制器

def create 
    @pokemon = Pokemon.new(params[:pokefuck]) 

    respond_to do |format| 
    if @pokemon.save 
     format.html { redirect_to '/pokemons', notice: 'pokemon was successfully created.' } 
     format.json { render json: @pokemon, status: :created, location: @pokemon } 
    else 
     format.html { render action: "new" } 
     format.json { render json: @pokemon.errors, status: :unprocessable_entity } 
    end 
    end 
end 

查看

原產地領域,工程

<%= f.select "size", options_for_select(size, @pokemon.size) %> 

大小是一個哈希

創建一個,不工作

var s = document.createElement("select"); 
s.name = "po"; 
s.id = "pokemon_size"; 
sex.appendChild(s); 
for(i in size) { 
    document.formName.po.options[i] = new Option(size[i], size[i]); 
} 

我認爲這是因爲我的新元素的名稱不是pokemon [size],但是當我使用它時,行document.formName.pokemon [size] .options [i]不再工作。

所以我有點掙扎看看我可以如何使這個作品。 謝謝!

+0

這可能是因爲您的新字段是即時創建的,因此不是原始DOM的一部分。 – weltschmerz

+0

那麼這意味着我必須創建兩種不同的表單?咩。 – Simon

回答

1

從您的控制器代碼中假設您的表單字段被命名爲「pokefuck」,那麼您需要創建選擇的「pokefuck [size]」的名稱,然後在表單的元素集合中引用該名稱:

var s = document.createElement("select"); 
s.name = "pokefuck[size]"; 
s.id = "pokemon_size"; 
sex.appendChild(s); 
for(i in size) { 
    document.formName.elements['pokefuck[size]'].options[i] = new Option(size[i], size[i]); 
} 
1

該字段的名稱需要將其放入params散列表中,以供您使用pokefuck

pokefuck[size]應該是表單元素的名稱。將表單元素附加到您提交的表單元素。