Может ли кто-нибудь объяснить 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 есть специальный синтаксис, позволяющий сделать параметры хэшем с хэшами внутри. Например, если браузер пользователя запросил
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
. Например, если у вас есть такой маршрут:Тогда запрос к URL , как
http://example.com/products/42
установитparams[:id]
в42
.источник
Params содержит следующие три группы параметров:
match '/user/:id'
в route.rb установит параметры [: id]params[:controller]
иparams[:action]
всегда доступен и содержит текущий контроллер и действиеисточник
User supplied parameters
немного больше? Например, полезен пример хэша params в UsersController. Ваш пример показывает, что хеш будет выглядеть примерно так:{first_name: "mike", user: {first_name: "mike"} ...}
Это правильно?{"_method"=>"put", "authenticity_token"=>"gubHya6uQrQLjPRXhOC0RUuCRdn7NFr6CeKrbRfBSHI=", "ripe"=>"true", "action"=>"update", "controller"=>"apples", "id"=>"4"}
. Простите, если я ошибаюсь, я начинающий рельсы. Согласно вашей заметке, я должен увидеть:{"_method"=>"put", "authenticity_token"=>"gubHya6uQrQLjPRXhOC0RUuCRdn7NFr6CeKrbRfBSHI=", "ripe"=>"true", "apple" => {"ripe"=>"true"}, "action"=>"update", "controller"=>"apples", "id"=>"4"}
я не знаю, связано ли это с сильными параметрами в rails4 или нет.В основном, параметры являются указанными пользователем данными для приложения рельсов.
Когда вы публикуете форму, вы обычно делаете это с запросом POST, а не с запросом GET. Вы можете думать, что обычные запросы рельсов как запросы GET, когда вы просматриваете сайт, если это помогает.
Когда вы отправляете форму, элемент управления возвращается в приложение. Как вы получаете значения, которые вы отправили в форму?
params
я показываю.О вашем коде.
@vote = Vote.new params[:vote]
создает новый Голосовать в базу данных, используя данные параметров [: голосование]. Учитывая, что ваша отправленная форма была названа под именем: голосование, все данные в ней находятся в этом: поле голосования хеша.Следующие две строки используются для получения элемента, и пользователь uid отправил форму.
находит новый или последний вставленный голос из базы данных с условиями item_id = item и user_id = uid.
Следующие строки занимают время последнего голосования и текущее время.
источник
На стороне Rails,
params
это метод, который возвращаетActionController::Parameters
объект. См. Https://stackoverflow.com/a/44070358/5462485источник
params
это метод. Руби может усложнить различие между переменными и методами