sql >> Databáze >  >> NoSQL >> MongoDB

RoR :Mongoid a formulář vytvářejí hash

Když používáte form_for :

Ve vašem případě Video Modelka. Pro pochopení konvence Rails:

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

Výsledkem je značka html, jejíž atribut názvu je video[description] . To znamená, že po odeslání formuláře bude hodnota zadaná uživatelem k dispozici v ovladači jako params[:video][:description] .

params proměnná je instací ActiveSupport::HashWithIndifferentAccess , jako je Hash s malým rozdílem, podle dokumentace:

Vaše params je něco jako:

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

Kde "video" nebo :video je jedním z klíčů hash. Takže params[:video] je ekvivalentní params.fetch("video") která hodnota je {"description"=>"Video desc"} . Jak vidíte, hodnota je další hash. Nakonec, abyste získali hodnotu popisu, musíte params[:video][:description] (The Rails way) nebo params.fetch("video").fetch("description") , jehož hodnota je "Video desc" .

fetch je Ruby metoda Hash :"Vrátí hodnotu z hash pro daný klíč."

Vezmeme-li toto v úvahu:

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

Je jednodušší používat konvence, ale určitě můžete mít params[:description] (jen pro případ):

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

Všimněte si, že používám text_field_tag místo f.text_field . V tomto případě bude název značky html description v params Hash obdržíte { "description" => 'Video desc" } ...

Podívejte se na dokumentaci rozhraní Rails API abyste porozuměli různým pomocníkům atd. A také si prohlédněte protokol vašeho serveru.



  1. Mám implementovat automatické zvyšování v MongoDB?

  2. Musím před vložením do MongoDB dezinfikovat uživatelský vstup (kombo MongoDB+Node js)

  3. MongoDB $ cos

  4. MongoDB $in s dílčím dotazem