MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

RoR:Mongoid и форма създават хеш

Когато използвате form_for :

Във вашия случай, Video модел. За да разберете конвенцията на Rails:

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

Което води до html таг, чийто атрибут на име е video[description] . Това означава, че когато формулярът бъде изпратен, въведената от потребителя стойност ще бъде налична в контролера като params[:video][:description] .

params променливата е инстанция на ActiveSupport::HashWithIndifferentAccess , като Hash с малка разлика, според документацията:

Вашите params е нещо като:

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

Където е "video" или :video е един от ключовете на Hash. И така, params[:video] е еквивалентен на params.fetch("video") чиято стойност е {"description"=>"Video desc"} . Както можете да видите, стойността е друг хеш. Накрая, за да получите стойността на описанието, трябва да params[:video][:description] (Начинът на Rails) или params.fetch("video").fetch("description") , чиято стойност е "Video desc" .

fetch е Ruby метод на Hash :"Връща стойност от хеша за даден ключ."

Като се има предвид това:

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

По-лесно е да използвате конвенции, но със сигурност можете да имате params[:description] (за всеки случай):

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

Имайте предвид, че използвам text_field_tag вместо f.text_field . В този случай името на html тага ще бъде description в params Хеш ще получите { "description" => 'Video desc" } ...

Разгледайте документацията за Rails API за да разберете различни помощници и т.н. И също така прегледайте дневника на вашия сървър.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mongodb - Настройка на репликацията на ниво db или колекция

  2. Mongo $regex със скоби и граница на думата

  3. Как да използвам C# за вмъкване на документ в съществуващи вградени документи?

  4. Код на грешка в комплекта реплики 76

  5. Как да получите брой от обобщените резултати от търсенето