sql >> Database >  >> NoSQL >> MongoDB

RoR:mongoïde en vorm creëren hash

Wanneer u form_for . gebruikt :

In jouw geval, Video model. Om de Rails-conventie te begrijpen:

<%=  form_for @video do |f| %>
...
<%= f.text_field :description %>
...

Wat resulteert in een html-tag waarvan het naamkenmerk video[description] . is . Dit betekent dat wanneer het formulier wordt verzonden, de door de gebruiker ingevoerde waarde beschikbaar zal zijn in de controller als params[:video][:description] .

De params variabele is een instantie van ActiveSupport::HashWithIndifferentAccess , zoals een Hash met een klein verschil, volgens documentatie:

Je params is zoiets als:

{"utf8"=>"✓",
 "_method"=>"post",
 "authenticity_token"=>"xxx",
 "video"=>
  {"description"=>"Video desc"}
}

Waar "video" of :video is een van de sleutels van de Hash. Dus, params[:video] is gelijk aan params.fetch("video") welke waarde is {"description"=>"Video desc"} . Zoals je kunt zien, is de waarde een andere hash. Ten slotte moet je om de waarde van de beschrijving te krijgen params[:video][:description] (The Rails way) of params.fetch("video").fetch("description") , welke waarde is "Video desc" .

fetch is een Ruby-methode van Hash :"Retourneert een waarde van de hash voor de opgegeven sleutel."

Hiermee rekening houdend:

Video.new(params[:video]) = Video.new(:description => "Video desc") = Video.new(:description => params[:video][:description])

Het is gemakkelijker om conventies te gebruiken, maar u kunt zeker params[:description] hebben (voor het geval dat):

<%=  form_for @video do |f| %>
...
<%= text_field_tag :description %>
...

Merk op dat ik text_field_tag . gebruik in plaats van f.text_field . In dit geval is de html-tagnaam description in de params Hash ontvangt u { "description" => 'Video desc" } ...

Bekijk de Rails API-documentatie om verschillende helpers te begrijpen, enz. En bekijk ook het logboek van uw server.



  1. MongoDB - Ontspan array met behulp van aggregatie en verwijder duplicaten

  2. Mongo-query Distinct met Sum werkt niet

  3. Upgraden naar de ClusterControl Enterprise Edition

  4. Criteria/aggregatie:zoek naar alle volledige documenten waarvan het matrixveld een element heeft met de laatst gegeven status