Incluir javascrip en aplicacion RoR

Antes que nada decir que este post no se refiere a una duda de rails en
si, pero supongo que habr bastante gente que se pueda encontrar en algun
momento en un dilema como el mio mientras esta desarrollando una
apicacion de rails.

He estado buscando un plugin que reproduciera la puntuación mediante la
tipica barra con las estrellas. Pero lo que he encontrado no me ha
convencido porque es del año 2007 y puede que me de mas problemas que
alegrias. Sin emabrgo navegando encontre esto:

Que es justo lo que andaba buscando. El problema es que no soy ningun
experto en javascript y como no he conseguido hacerlo funcionar os pido
ayuda. Tras descargarlo de la web tengo estos ficheros:
assets (en realidad es una carpeta con los iconos de las imagenes): la
envio a public/images
rating.css: A la carpeta con los demas css
rating.js:A la carpeta public/javascripts con los demas archivos .js

Estos no tienen mucha complicacion, pero el que me esta dando mas que
hablar es el index.php que es asi:

Rating Widget 0.1.3 " />
    <input name="submit" type="submit" value="Submit" />
</form>
<?php if(isset($_POST)): echo("Value is: ".$_POST["input-rating"]); endif ?>

La cuestion es que en la aplicacion unicamente tenemos el
application.html.erb y yo solo quiero mostrar el script para votar los
videos. Esto es lo que se me habia ocurrido hacer:

<%-if @js -%>

<%- end -%>

@js la defino en el show del video dandole valor uno

def show
.
.
@js=1
end

Asi solo deberia cargar el javascipt en el show del video. Sin embargo
no me sale nada.

Agradeceria cualquier recomendación o consejo, pues justo lo que
necesito implementa pese a que mis conociemientos de como hacerlo me
impidan hacerlo. De momento voy a seguir navegando y buscando
informacion. Un saludo y gracias a todos por la ayuda.

Salu2

Pues yo no veo el por que tocar el javascript, funciona para cualquier
lenguje, lo unico que toca cambiar esto

<?php if(isset($_POST)): echo("Value is: ".$_POST["input-rating"]); endif ?>

Por su similar en rails
El 26/03/2009, a las 10:49, Jose vicente Ribera pellicer
escribió:

convencido porque es del año 2007 y puede que me de mas problemas que
rating.css: A la carpeta con los demas css

Rating Widget 0.1.3

Ror-es mailing list
[email protected]
http://lists.simplelogica.net/mailman/listinfo/ror-es

Mauricio D.
[email protected]
+57 315 4183043
http://www.3zona.com

La cosa ya parece tener buena pinta. Os explico lo que he hecho:
En el aplication.html.erb-><%= javascript_include_tag @js if @js %>

En el controlador de videos, dentro del show-> @js = ‘rating’ (asi
puedo ir reutilizando la variable).

En la vista, dentro del show:
.
.
.

" />
    <input name="submit" type="submit" value="Votar" />
</form>
<?php if(isset($_POST)): echo("Value is: ".$_POST["input-rating"]); endif ?>

.
.
.

El problema que tengo ahora es que este javascript esta diseñado para
php y no para RoR y la linea:

<?php if(isset($_POST)): echo("Value is: ".$_POST["input-rating"]); endif ?>

Me desconcierta, por ahora en la vista unicamente salen unos simbolos
raros=>(" /> ) y el boton de votar. Si alguien con conociemientos en php
supiera decirme el equivalente de la inea en cuestion le estaria
agraecido. Sigo investigndo.

Saludos!!

<?php if(isset($_POST)): echo("Value is: ".$_POST["input-rating"]); endif ?>

$_POST[“input-rating”] esto es un valor que se recoge en el server de
los
datos que el user manda por POST. Se supone que hay un campo
de formulario con ese nombre (input-rating).
Esto lo que hace es pintar en la vista la puntuación. Pero primero
deberas
recoger el valor que te da el usurio y guardarlo en la BBDD ¿no?
y luego ese valor en la vista show:

<%= “Value is: #{@puntuación}” %>

2009/3/26 Jose vicente Ribera pellicer
[email protected]

Mauricio D. wrote:

Pues yo no veo el por que tocar el javascript, funciona para cualquier
lenguje, lo unico que toca cambiar esto

<?php if(isset($_POST)): echo("Value is: ".$_POST["input-rating"]); endif ?>

Por su similar en rails

Gracias por contestar Mauricio, en ello estamos :wink:

Andrés Gutiérrez wrote:

<?php if(isset($_POST)): echo("Value is: ".$_POST["input-rating"]); endif ?>

Pero el codigo que hay dentro es javascript no? en teoria eso se debe
quedar igual, de lo que tendremos que buscar el equivalente sera de

<?php ?>

no?

#{@puntuación}

No sé si habre cometido más errores en mi respuesta. Pero una variable
con
acento, queda feo :-)))

El 26 de marzo de 2009 18:02, Andrés gutiérrez
[email protected]escribió:

Todo lo que aparece entre <?php ?> es php y el equivalente en ruby es
<%= %>

El 26 de marzo de 2009 18:14, Jose vicente Ribera pellicer <
[email protected]> escribió:

¿Has puesto esto?

<%- if(isset($_POST)): echo("Value is: ".$_POST[“input-rating”]); endif

¿de verdad?

[echo] es una palabra que en PHP significa “muestrame”. Como ya te he
dicho
antes, todo lo que aparece entre las llaves <?php ?> es PHP
lo tienes que reescribir a Ruby.

2009/3/26 Jose vicente Ribera pellicer
[email protected]

Andrés Gutiérrez wrote:

Todo lo que aparece entre <?php ?> es php y el equivalente en ruby es
<%= %>

Gracias Andrés, he cambiado la linea en cuestion por:

<%- if(isset($_POST)): echo("Value is: ".$_POST[“input-rating”]); endif
%>

y genera un error raro :frowning:

SyntaxError in Videos#show

Showing videos/show.html.erb where line #17 raised:

compile error
/Users/jose/mimandote.com/app/views/videos/show.html.erb:17: syntax
error, unexpected tGVAR
_erbout.concat(( if(isset($_POST)): echo("Value is:
".$_POST[“input-rating”]); endif ).to_s); _erbout.concat “\n”
^
/Users/jose/mimandote.com/app/views/videos/show.html.erb:17: syntax
error, unexpected ‘)’, expecting kEND
_erbout.concat(( if(isset($_POST)): echo("Value is:
".$_POST[“input-rating”]); endif ).to_s); _erbout.concat “\n”
^
/Users/jose/mimandote.com/app/views/videos/show.html.erb:35: syntax
error, unexpected $end, expecting ‘)’

Extracted source (around line #17):

14:
15:
16:
17: <%= if(isset($_POST)): echo("Value is: ".$_POST[“input-rating”]);
endif %>
18:
19:
20: var pValue = ‘<?= $_POST["input-rating"] ?>’;

Se supone que el script funciona y no deberia de dar este tipo de error
y que opte por este script ya que la documentacion que habia para rails
era algo antigua y podia tener problemas de compatibilidad…que ironia
no?.

Ahora me toca buscar el fallo en en javascript, lenguaje de basicamente
he usado para implementar un poco de Ajax…en fin ,as madera :wink:

PD
Como rails usa prototype otra opcion que habia pensado y que era muy
elegante era esta:
http://www.nickstakenburg.com/projects/starbox/

lastima que sea de pago.

Como no recordar que cualquier ayudaes bienvenida.

Un saludo

Vamos por partes. No soy ningun experto en PHP, pero te intentare
explicar
lo que hace el ejemplo que viene con el .js

Vale, primero de todo aquí esta el código del ejemplo [1]
1ª Pregunta:
¿Has añadido todas las librerías .js que aparecen en el ejemplo. Y en
ese
orden. Lo digo porque ese ejemplo funciona con YUI (de Yahoo) no con
Prototype que es la que viene con rails

2º Lo que hace el código PHP es:
a) recoge el nº de estrellitas que marca el usuario cuando el usuario
presiona submit:

<?php if(isset($_POST)): echo("Value is: ".$_POST["input-rating"]); endif ?>

Lo que dice el if es si me llega algo por POST cogeme el valor de
input-rating y me pones:
Value is: [AQUÍ el Nº de estrellas marcadas]. Como de inicio no hay
ninguna marcada pone 0

b)Le pasa ese mismo valor al javascript para que haga con el lo de
mostrar
las estrellas. Aquí:

verás que hay <?= ?> esto es lo mismo que esto <?php ?>

Esta linea es la que hace la mágia de poner las estrellitas. Pero la
lógica
de esto ya está en todos esos .js que hay en el HEAD.
var r = new rating(‘rater’, 5, pValue || 0 , true, ‘input-rating’);

Lo que es el ejemplo es fácil de seguir(en mi opinión). Como hacerlo en
ruby…te lo voy a decir pero puede que no sea correcto:

1º Asegurate de tener todas las librerías (.js) incluidas. Aunque por el
nivel que tienes de .js, yo no me liaría y buscaba algo hecho en
Prototype

2º En el controlador un metodo que pille lo que se manda por el form y
lo
guarde en una variable para luego usarla en la vista:
#Stars_controller.rb
def show_stars
@number_stars = (params[‘input-rating’])? params[‘input-rating’] : 0
@value_is = (params[‘input-rating’])? 'Value is:
'params[‘input-rating’]
: ‘Value is :0’
end
He hecho dos variable porque la segunda es para mostrar en la vista el
texto
que va debajo de la estrellas. Aquí el ejemplo en funcionamiento [2]

3º En la vista
#show_stars.html.erb

<% form_tag ‘/show_stars’ do -%>
<%= hidden_field_tag ‘input-rating’, @number_stars%>

<%= submit_tag 'Submit' %>
<% end -%>

4º Este cacho:

<?php if(isset($_POST)): echo("Value is: ".$_POST["input-rating"]); endif ?>

Lo cambias por este:
<%= @value_is %>

5º Al javascript le pasas así las varibles. Creo, seguro que esto se
puede
hacer con partials o algo así:

Dios!!! cada vez me gusta más Ruby.

Si esto te parece complicado, te sugiero que estudies un poco más de
javascript y un poco más de rails…y por qué no un poco de PHP, nunca
se
sabe.

Un saludo

[1] http://pastie.org/428003
[2] http://code.richardhealy.co.uk/osp/rater/
El 26 de marzo de 2009 19:59, Andrés gutiérrez
[email protected]escribió:

PD.
Quizás este diciendo una tonteria, pero sino lo pregunto no lo sabre.

Puedo tener integrados prototype y jquery al mismo tiempo?
Lo digo porque como bien has dicho Rails trabaja con prototype y este
ejemplo con YUI, he visto cosas de jQuery que me parecen muy chulas para
un futuro.

Saludos

en teoría puedes hacerlo, aunque yo nunca pude hacerlo tal vez por mis
limitaciones, pero no pude :P.

Aquí tienes algunos lugares donde puedes encontrar información

jQuery on Rails: Why Bother? // RailsTips by John Nunemaker

http://b.lesseverything.com/2006/12/31/making-jquery-and-prototype-play-nice-in-rails
#136 jQuery - RailsCasts

saludos.

2009/3/26 Jose vicente Ribera pellicer
[email protected]

Muchisimas gracias Andres, así da gusto. El próxino dia lo probare en el
trabajo y este fin de semana si tengo un rato intentare aplicarlo en una
aplicacion mia a ver que tal.

Ya posteare los resultados.

Un saludo

jquery soporta algo como jquery(‘body > a’).etc.etc
en vez de $(‘body > a’).etc.etc

para evitar colisiones
pero no te lo recomiendo, jquery a tope!

El 26/03/2009, a las 22:23, Jose vicente Ribera pellicer
escribió:

PD.

yo lo que te recomiendo es ue utilices el plugin acts_as_rated y
cualquier
star rating , ya sea en protpotype , jquery etc… asi tienes las capas
separadas y en contorller metes la logica para la respuesta etc…

asi lo he hecho yo en artenlinea.com

saludos
Atte.
Miguel Michelson Martinez

www.artenlinea.com

2009/3/26 Andrés gutiérrez [email protected]

Pues mira, la verdad es que todavia no me he liado a desarrollar nada
serio
en Rails. Pero esta última semana le he estado dando vueltas al tema de
que
librería javascript usar
Rails 3 será agnostico. Podremos usar la que queramos sin problemas.

Lo que yo te recomiendo es que te decidas por una y la uses hasta que te
salga por las orejas. Porque la capa de javascript tiene mucha miga como
para tomarselo a la ligera
Ni de coña vas a aprender JQuery y Prototype bien si mezclas las dos.
Elige
y todo lo que hagas hazlo sólo con una. Y después de un tiempo si
quieres
prueba la otra…y luego otra…
De una en una.

De todos modos js es un mundo en si mismo. Nunca le podrás sacar todo el
partido si no dedicas un tiempo a tener claros los principios básicos
del
lenguaje (javascript)
Por ejemplo:
Si empiezas una App rails y no sabes nada de js. No podrás sentirte
igual de
afortunado que alguien que haya trabajado con js sin la ayuda de las
librerías (JQuery, prototype,…)
Que te resuelven gran parte de las incompatibilidades que hay que salvar
si
queremos hacer cosas cross-broser

Yo personalmente llevaba una semana tentado a pasarme a JQuery sin darle
una
oportunidada Prototype. pero hace poco he hecho una cosita con PHP+
prototype y me he dado cuenta de que es
muy bueno…y ya que rails lo trae de serie,…lo voy a usar. Desde luego
JQuery tiene mucha doc y muchos plugins. Pero ya habrá tiempo de usarlo.
Lo
inportante es hacer javascript no intrusivo. Sea con lo que sea…pero
esto
es otra historia.

Un saludo

El 26 de marzo de 2009 22:28, marze [email protected] escribió:

Miguel Michelson wrote:

yo lo que te recomiendo es ue utilices el plugin acts_as_rated y
cualquier
star rating , ya sea en protpotype , jquery etc… asi tienes las capas
separadas y en contorller metes la logica para la respuesta etc…

asi lo he hecho yo en artenlinea.com

saludos
Atte.
Miguel Michelson Martinez

www.artenlinea.com

Finalmente me estoy decantando por esta opcion tras unos cuantos
fracasos con el javascript. Gracias a todos por la ayuda pero prefiero
llevarme el problema a un terreno que conozco mas que no a javascript
del que no conozco mucho.

De momento ya logro sacar la barra con las estrellas en el show…

PD.
Por si a alguien le sirve de ayuda estoy siguiendo este hilo:

es algo antiguo pero de momento la cosa marcha.

PD2.
Si usais prototype esta la libreria starbox, eso si es de pago para uso
comercial, por eso la descatamos. Sin embargo en jquery creo recordar
que habia un plugin similar gratis.

Un saludo

Andrés Gutiérrez wrote:

Finalmente me estoy decantando por esta opcion tras unos cuantos
fracasos con el javascript. Gracias a todos por la ayuda pero prefiero
llevarme el problema a un terreno que conozco mas que no a javascript
del que no conozco mucho

Parece ser lo que buscabas. Solo un par de puntualizaciones, para que
luego
no te sorprendas. El ejemplo que estas siguiendo:

1- Si usa javascript. (usa AJAX).*
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::**
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*
A little RJS
Create the file /views/rating/rate.rjs
page.replace_html “star-ratings-block”, :partial => ‘rating/rating’,
:locals
=> { :picture=> @picture }
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
*:::::::::::

*2- Como no menciona ninguna librería asumo que tira de Prototype.

Un saludo.

El 30 de marzo de 2009 11:12, Jose vicente Ribera pellicer <
[email protected]> escribió:

1-Efectivamente usa AJAX, pero es un simple page.replace_html (no digo
que la opcion del javascript tenga porque ser complicada, pero al menos
para mi este plugin es mas sencillo)

2-Asumes bien, funciona con prototype.

Bueno, decir que en el enlace del plugin no viene ninguna imagen de las
estrellas, tan simple como buscar un poco con Google. A estas horas el
plugin esta funcionando perfectamente, he generado un promedio de votos
y lo unico que queda es distinguir si un usuario ha votado o no para
que le muestre la barra de estrellas con la puntuacion que le dio o
vacia.

Por lo tanto pese a la antiguedad no he encontrado apenas problemas para
hacerlo funcionar con rails 2.1.

Saludos y gracias a todos por la ayuda.

Finalmente me estoy decantando por esta opcion tras unos cuantos
fracasos con el javascript. Gracias a todos por la ayuda pero prefiero
llevarme el problema a un terreno que conozco mas que no a javascript
del que no conozco mucho

Parece ser lo que buscabas. Solo un par de puntualizaciones, para que
luego
no te sorprendas. El ejemplo que estas siguiendo:

1- Si usa javascript. (usa AJAX).*
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::**
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*
A little RJS
Create the file /views/rating/rate.rjs
page.replace_html “star-ratings-block”, :partial => ‘rating/rating’,
:locals
=> { :picture=> @picture }
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
*:::::::::::

*2- Como no menciona ninguna librería asumo que tira de Prototype.

Un saludo.

El 30 de marzo de 2009 11:12, Jose vicente Ribera pellicer <
[email protected]> escribió: