Может ли кто-нибудь объяснить params
в контроллере Rails: откуда они берутся и что они ссылаются?
def create
@vote = Vote.new(params[:vote])
item = params[:vote][:item_id]
uid = params[:vote][:user_id]
@extant = Vote.find(:last, :conditions => ["item_id = ? AND user_id = ?", item, uid])
last_vote_time = @extant.created_at unless @extant.blank?
curr_time = Time.now
end
Я хотел бы иметь возможность читать этот код по очереди и понимать, что происходит.
Параметры поступают из браузера пользователя, когда они запрашивают страницу. Для HTTP GET-запроса, который является наиболее распространенным, параметры кодируются в URL-адресе. Например, если пользовательский браузер запросил
http://www.example.com/?foo=1&boo=octopus
тогда params[:foo]
будет "1", а params[:boo]
будет "осьминог".
В HTTP/HTML параметры действительно представляют собой серию пар ключ-значение, где ключ и значение являются строками, но Ruby on Rails имеет особый синтаксис для того, чтобы заставить params быть хэшем с хэшами внутри. Например, если пользовательский браузер запросил
http://www.example.com/?vote[item_id]=1&vote[user_id]=2
тогда params[:vote]
будет хешем, params[:vote][:item_id]
будет "1", а params[:vote][:user_id]
будет "2".
Параметры Ruby on Rails являются эквивалентом массива $_ REQUEST в PHP.
params
Rails. Данные cookie включены в хэш session
.
Как отмечали другие, значения params
могут исходить из строки запроса запроса GET или данных формы запроса POST, но есть и третье место, из которого они могут исходить: путь к URL.
Как вы, возможно, знаете, Rails использует что-то, называемое маршрутами, для прямого запроса на соответствующие действия контроллера. Эти маршруты могут содержать сегменты, которые извлекаются из URL-адреса и помещаются в params
. Например, если у вас есть такой маршрут:
match 'products/:id', ...
Затем запрос к URL-адресу, подобному http://example.com/products/42
, установит params[:id]
в 42
.
Парамы содержат следующие три группы параметров:
match '/user/:id'
в routes.rb будут установлены параметры [: id]params[:controller]
и params[:action]
всегда доступны и содержат текущий контроллер и действиеUser supplied parameters
немного больше? Например, полезен пример хэша params в UsersController. Ваш пример показывает, что хеш будет выглядеть примерно так: {first_name: "mike", user: {first_name: "mike"} ...}
Это правильно?
В принципе, параметры являются данными, указанными пользователем, для приложения rails.
Когда вы отправляете форму, вы делаете это обычно с запросом POST, а не с запросом GET. Вы можете думать, что обычные запросы на рельсы являются запросами GET, когда вы просматриваете сайт, если это помогает.
Когда вы отправляете форму, элемент управления возвращается в приложение. Как вы получаете значения, которые вы отправили в форму? params
как.
О вашем коде. @vote = Vote.new params[:vote]
создает новое голосование в базе данных с использованием данных параметров [: vote]. Учитывая, что ваша форма, представленная пользователем, была названа по имени: vote, все данные в ней: поле голосования хэша.
Следующие две строки используются, чтобы получить элемент и пользователь uid отправил в форму.
@extant = Vote.find(:last, :conditions => ["item_id = ? AND user_id = ?", item, uid])
находит новый или последний вставленный голос из базы данных с условиями item_id = item и user_id = uid.
Следующие строки занимают время последнего и текущего времени.
На стороне Rails params
- это метод, возвращающий объект ActionController::Parameters
.
См. https://stackoverflow.com/questions/44069348/ruby-on-rails-is-params-a-method-or-a-hash
params
- это метод. Ruby может усложнить различие между переменными и методами.