Link_to Sintaxe com Rails3 (link_to_remote) e JavaScript básico não funcionando em um aplicativo Rails3?

StackOverflow https://stackoverflow.com/questions/2458841

Pergunta

Gostaria de saber se a sintaxe básica do link_TO está completamente quebrada no mestre do Rails3 atual ou se estou fazendo uma sintaxe errada aqui.

= link_to "name", nil, :onlick => "alert('Hello world!');"

Deve realmente produzir um alerta no clique. muito simples. Não funciona no meu projeto Rails3! (Também sem saída de erro!) Alguma idéia?

Para a sintaxe link_to geral, não consegui encontrar um exemplo em que eu pudesse combinar um link_to_remote com uma confirmação, a classe remota e html (veja minha tentativa abaixo)

= link_to "delete", {:action => "destroy", :remote => true, :method => :delete, :confirm => "#{a.title} wirklich Löschen?" }, :class => "trash"

Até a API do Rails3 não me ajuda aqui: http://rails3api.s3.amazonaws.com/index.html

ajuda!

Foi útil?

Solução 2

Ok, parece que as novas alterações discretas de JavaScript introduziram o problema. Veja a seguinte postagem para obter mais informações se você tiver problemas semelhanteshttp://blog.loopedstrange.com/modest-rubyist-archive/rails-3-ujs-and-csrf-meta-tags

 <%= csrf_meta_tag %>

Corrigido coisas para mim.

Outras dicas

Acredito que o seu problema aqui é que você configurou o link para mostrar o alerta quando ele é lambido, em oposição ao clicar. ;)

Quanto a link_to_remote, Ele mudou com a chave para JavaScript discreto. Você pode ler sobre isso aqui: http://blog.solnic.eu/2009/09/08/unobtrusive-javascript-helpers-in-rails-3.html

Nil não funciona:

= link_to "name", nil, :onclick => "alert('Hello world!');"
=> <a href="/currentpath", onclick="alert('Hello world!');">name</a>

Você deveria usar:

= link_to "name", "#", :onclick => "alert('Hello world!');"
=> <a href="#", onclick="alert('Hello world!');">name</a>

Se nenhuma das outras respostas aqui funcionar para você, talvez isso ajude.

Portanto, a declaração CSRF_META_TAG não foi suficiente para mim, embora de qualquer maneira seja adicionada ao seu arquivo de layout para o Rails 3. Com mim, acabou sendo um conflito com o jQuery. Acabei de colocar isso:

<script type="text/javascript">
  jQuery.noConflict();
</script>

Após a tag Rails Scripts no meu layout e o confronto entre o protótipo e o jQuery foi resolvido. Ei Presto, eu estava recebendo a caixa de diálogo de confirmação em delete.

Essa técnica também resolveu meu problema original ao usar o link_to para tentar excluir um registro. Com link_to qualquer comando de destruição parecia redirecionar para a página do show para o registro. Por isso, mudei para Button_To com base em outra solução que vi, mas sem confirmação. Gostaria de saber se há alguns problemas mais profundos com jQuery e protótipo.

Tudo isso aconteceu em um aplicativo Rails 2.3.5 atualizado que parecia estar funcionando bem sem precisar incluir protótipo ou: padrões no meu arquivo de layout.

Em uma nota lateral, segui estas instruções:

http://webetech.union.rpi.edu/blog/2010/02/21/jquery-and-rails-3/

Para tentar perder protótipo juntos para este projeto e usar o JQuery Git Submodule for Rails 3. Seguir estas instruções não funcionou e eu ainda não estava confirmando diálogos com Button_to e a página Mostrar ao usar link_to. Apenas pensei em mencionar isso, então salve alguém o problema de tentar isso.

Um comentário fora do tópico para uma resposta acima, já que ainda não posso comentar :(

@Robeastham: Imaginei que deixaria alguns comentários que podem ajudar com alguns dos problemas que você incluiu.

Eu tenho tido o problema "Destroy Link re-dirigindo para a página Show em vez da página do índice" também desde que mudou de ActiveRecord para Mongoid e não encontrei uma solução real (já removeu o protótipo). No entanto, uma solução alternativa que funciona de maneira limpa é especificar explicitamente o caminho re-direcionado usando: local para responder_with:

respond_with @themodel, :location => themodels_url

Quanto a obter um pop-up de confirmação com um botão, você pode fazer:

button_to "Button Name", { :controller => "your/controller", :action => :action_name, :confirm => "Text for the pop-up"}, { :method => :<method name> }

por exemplo

button_to "Click Here", { :controller => "home", :action -> :set_completed, :confirm => "Mark the item complete?" }, { :method => :put }

Isso funcionou para mim:

<%= link_to "Recommend", recommend_user_path(@user), :remote => true %>

Verifique se isso está em suas visualizações layout application.html.erb (ou equivalente):

<%= csrf_meta_tags %>

Observe que o Rails v3.2.2 usa "tags" não "tag"

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top