Rails Params объяснил?

191

Может ли кто-нибудь объяснить 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

Я хотел бы иметь возможность читать этот код по очереди и понимать, что происходит.

  • 2
    Каков ваш опыт веб-разработки на стороне сервера? Какие технологии вы уже знаете?
  • 3
    Я был с HTML и CSS годами. Взятые классы, которые использовали PHP, JS и Java. Использовал очень мало MVC с PHP, хотя. Я действительно изучил программирование с использованием Java. И я хорошо понимаю теорию баз данных.
Теги:

5 ответов

236
Лучший ответ

Параметры поступают из браузера пользователя, когда они запрашивают страницу. Для 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.

  • 12
    Эквивалент $ _REQUEST за исключением того, что $ _REQUEST включает в себя данные get, post и cookie, а параметры только получают и публикуют данные.
  • 3
    Данные @renocor POST также включены в хэш params Rails. Данные cookie включены в хэш session .
Показать ещё 5 комментариев
66

Как отмечали другие, значения params могут исходить из строки запроса запроса GET или данных формы запроса POST, но есть и третье место, из которого они могут исходить: путь к URL.

Как вы, возможно, знаете, Rails использует что-то, называемое маршрутами, для прямого запроса на соответствующие действия контроллера. Эти маршруты могут содержать сегменты, которые извлекаются из URL-адреса и помещаются в params. Например, если у вас есть такой маршрут:

match 'products/:id', ...

Затем запрос к URL-адресу, подобному http://example.com/products/42, установит params[:id] в 42.

41

Парамы содержат следующие три группы параметров:

  • Пользовательские параметры
    • GET ( http://domain.com/url?param1=value1&param2=value2 будет устанавливать параметры [: param1] и params [: param2])
    • POST (например, JSON, XML будет автоматически анализироваться и храниться в параметрах)
    • Примечание. По умолчанию Rails дублирует предоставленные пользователем параметры и сохраняет их в параметрах [: user], если в UserController, можно изменить с помощью параметра wrap_parameters
  • Параметры маршрутизации
    • match '/user/:id' в routes.rb будут установлены параметры [: id]
  • Параметры по умолчанию
    • params[:controller] и params[:action] всегда доступны и содержат текущий контроллер и действие
  • 1
    Не могли бы вы расширить свою заметку в разделе User supplied parameters немного больше? Например, полезен пример хэша params в UsersController. Ваш пример показывает, что хеш будет выглядеть примерно так: {first_name: "mike", user: {first_name: "mike"} ...} Это правильно?
  • 0
    @ 7stud Это правильно!
Показать ещё 3 комментария
13

В принципе, параметры являются данными, указанными пользователем, для приложения 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.

Следующие строки занимают время последнего и текущего времени.

1

На стороне Rails params - это метод, возвращающий объект ActionController::Parameters. См. https://stackoverflow.com/questions/44069348/ruby-on-rails-is-params-a-method-or-a-hash

  • 1
    +1 за разъяснение, что params - это метод. Ruby может усложнить различие между переменными и методами.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню