Alguém poderia explicar params
no controlador Rails: de onde eles vêm e o que eles estão fazendo referência?
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
Gostaria de poder ler este código linha por linha e entender o que está acontecendo.
ruby-on-rails
ruby
Dru
fonte
fonte
Respostas:
Os parâmetros vêm do navegador do usuário quando solicitam a página. Para uma solicitação HTTP GET, que é a mais comum, os parâmetros são codificados no URL. Por exemplo, se o navegador de um usuário solicitou
http://www.example.com/?foo=1&boo=octopus
então
params[:foo]
seria "1" eparams[:boo]
seria "polvo".Em HTTP / HTML, os parâmetros são realmente apenas uma série de pares de valores-chave em que a chave e o valor são cadeias de caracteres, mas o Ruby on Rails possui uma sintaxe especial para tornar os parâmetros um hash com hashes internos. Por exemplo, se o navegador do usuário solicitou
http://www.example.com/?vote Quepasa
então
params[:vote]
seria um hash,params[:vote][:item_id]
seria "1" eparams[:vote][:user_id]
seria "2".Os parâmetros do Ruby on Rails são equivalentes à matriz $ _REQUEST no PHP .
fonte
params
hash do Rails . Os dados do cookie estão incluídos nosession
hash.Como outros já apontaram, os
params
valores podem vir da sequência de consultas de uma solicitação GET ou dos dados do formulário de uma solicitação POST, mas também há um terceiro local de origem: O caminho da URL.Como você deve saber, o Rails usa algo chamado rotas para direcionar solicitações para as ações correspondentes do controlador. Essas rotas podem conter segmentos que são extraídos da URL e inseridos
params
. Por exemplo, se você tiver uma rota como esta:Em seguida, uma solicitação para um URL como
http://example.com/products/42
será definidaparams[:id]
como42
.fonte
Params contém os três grupos de parâmetros a seguir:
match '/user/:id'
no routes.rb irá definir parâmetros [: id]params[:controller]
eparams[:action]
está sempre disponível e contém o controlador e a ação atuaisfonte
User supplied parameters
um pouco mais? Por exemplo, um exemplo do hash de parâmetros no UsersController seria útil. Seu exemplo faz parecer que o hash será algo como:{first_name: "mike", user: {first_name: "mike"} ...}
Isso está correto?{"_method"=>"put", "authenticity_token"=>"gubHya6uQrQLjPRXhOC0RUuCRdn7NFr6CeKrbRfBSHI=", "ripe"=>"true", "action"=>"update", "controller"=>"apples", "id"=>"4"}
,. Perdoe-me se estiver errado, sou iniciante em trilhos. De acordo com sua nota, devo ver:{"_method"=>"put", "authenticity_token"=>"gubHya6uQrQLjPRXhOC0RUuCRdn7NFr6CeKrbRfBSHI=", "ripe"=>"true", "apple" => {"ripe"=>"true"}, "action"=>"update", "controller"=>"apples", "id"=>"4"}
não sei se isso tem a ver com parâmetros fortes no rails4 ou não.Basicamente, os parâmetros são dados especificados pelo usuário para aplicação em trilhos.
Quando você publica um formulário, geralmente o faz com a solicitação POST, em oposição à solicitação GET. Você pode pensar em solicitações normais de rails como solicitações GET, quando você navega no site, se ajudar.
Quando você envia um formulário, o controle é retornado ao aplicativo. Como você obtém os valores que você enviou ao formulário?
params
eu mostro.Sobre o seu código.
@vote = Vote.new params[:vote]
cria novo voto no banco de dados usando dados de parâmetros [: vote]. Como o usuário enviado do formulário foi nomeado com o nome: vote, todos os dados estão neste campo: hash do voto.As próximas duas linhas são usadas para obter o item e o usuário do uid enviou ao formulário.
localiza o voto mais recente ou inserido pela última vez no banco de dados com as condições item_id = item e user_id = uid.
As próximas linhas levam a última hora da votação e a hora atual.
fonte
No lado do Rails,
params
é um método que retorna umActionController::Parameters
objeto. Consulte https://stackoverflow.com/a/44070358/5462485fonte
params
é um método. Ruby pode torná-lo difícil distinguir variáveis de métodos