J'utilise PrivatePub et je rencontre un comportement étrange ici. Avant de passer par les détails s'il vous plaît noter que j'utilise Ruby 1.9.3
et Rails 3.2.2
.Comment puis-je mélanger le code ruby en ligne avec mon RJS côté client?
Disons que j'ai TestsController
:
class TestsController < ApplicationController
def index
end
def create
respond_to do |format|
format.js
end
end
end
Et tests/index.html.erb
:
<h1>Test</h1>
<%= content_for :footer do %>
<%= subscribe_to tests_path %>
<% end %>
Et tests/create.js.erb
:
<% publish_to tests_path do %>
alert("Working fine");
if (false) {alert("This never run");};
if (false) {<% puts "*"*100 %>};
<% end %>
simple et simple. Maintenant, mon problème est que chaque fois que je cours create
action, pour une raison quelconque <% puts "*"*100 %>
toujours exécuter (même lorsque j'ai fait if (faux) déclaration).
Je sais que je peux utiliser Ruby if
et devrait fonctionner correctement, quelque chose comme:
<% if false %>
<% puts "*"*100 %>
<% end %>
Mais je veux faire quelques clients validation côté (comme par exemple pour vérifier qu'un div existe et rendre quelques partials en conséquence) comme:
if ($("#chat").length){
$("#chat").append("<%= j render(@messages) %>");
}
Mais semble <%= j render(@messages) %>
sera rendu tout le temps.
Comment puis-je m'attaquer à ce problème et utiliser l'instruction if et le code du template ruby côté client à l'intérieur? En ce moment, il semble que tout ce qui est à l'intérieur <%%>
soit déclenché et je ne veux pas de ce comportement.
Merci pour l'aide. Vous avez raison, j'ai juste compris cela en appliquant plus de test. C'était une mauvaise idée de mélanger JS avec mon code ruby :(surtout ça devient de plus en plus compliqué –
Serait-ce une bonne idée d'émettre une requête http du côté client? Comme 'if (false) {$ .get (" tests/puts_action ", function (data) {});}; 'et puts_action comprendrait" puts "*" * 100'? –