Изменены параметры Rails?

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

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

Ответ 1

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

Ответ 2

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

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

match 'products/:id', ...

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

Ответ 3

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

  • Пользовательские параметры
    • 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] всегда доступны и содержат текущий контроллер и действие

Ответ 4

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

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

Ответ 5

На стороне Rails params - это метод, возвращающий объект ActionController::Parameters. См. fooobar.com/info/32040/...