2017-01-23 4 views
2

Я хочу использовать текущий пользовательский скрипт для кофе. Но если я пытаюсь использовать current_user в своем сценарии кофе, я получаю неопределенную переменную current_user в консоли браузера. Есть ли способ доступа к нему в сценарий кофе? Что я точно хотел бы сделать это следующим образом:Доступ к рельсам переменной в сценарии кофе

current_user.updated_at < Date.now().getTime() 

Это может быть глупый вопрос, но в любом случае мне это нужно, чтобы реализовать это в моем рельсах приложение.

Любая помощь будет оценена по достоинству. Заранее спасибо. :)

+0

Вы можете попробовать посмотреть этот драгоценный камень https://github.com/gazay/gon. Я не использовал его сам, но другие рекомендовали его здесь иногда. – Iceman

+2

Что это за кодолин? : O Я действительно не понимаю, что вы хотите сделать.На левой стороне есть код ruby, а справа есть Javascript ?! ლ (ಠ 益 ಠ ლ) – siegy22

ответ

0

Скрипт кофе превратился в javascript и запускается в браузере. То, что вы хотите сделать, это отобразить current_user.updated_at в узле в HTML, а затем использовать скрипт кофе для извлечения этого значения.

+0

Спасибо за ответ. но возможно ли это каким-либо другим способом? – Vishal

1

Для сырой JavaScript + ERB

<script type="text/javascript"> 
    var my_foo = <%= some_ruby_expression %> 
</script> 

например,

<script type="text/javascript"> 
    var user_name = "<%= current_user.name %>"; 
</script> 

кроме var ключевого слова, это правильный код CoffeeScript, я считаю.

Btw, это действительно то, о чем вы просите? - Я не знаю, -))

UPDATE

current_user является объектом рубин/active_record. Вы можете назначить его переменной javascript, но не можете использовать ее в рубине.

Но ниже фрагмент может дать вам некоторую идею. Я создал проект рельсов и закрепил модель страницы.

<p id="notice"><%= notice %></p> 

<p> 
    <strong>Title:</strong> 
    <%= @page.title %> 
</p> 

<p> 
    <strong>Email:</strong> 
    <%= @page.email %> 
</p> 

<p> 
    <strong>Comments:</strong> 
    <%= @page.comments %> 
</p> 

<script type="text/javascript"> 
    var mypage = '<%= raw @page.to_json %>'; // attention to single quotes 
    console.log(mypage); 
</script> 

<%= link_to 'Edit', edit_page_path(@page) %> | 
<%= link_to 'Back', pages_path %> 

Затем вы можете разобрать и использовать его как обычный объект javascript. Ниже показано, как я это сделал.

enter image description here

UPDATE # 2

сделать это в CoffeeScript файле.

window.onload = -> 
    myvar = '<%= raw @page.to_json %>' 
    myvarAsObj = JSON.parse(myvar) 
    do_something_with myvarAsObj 
    return 
+0

Спасибо за ответ, но я хочу использовать 'current_user', который является переменной помощника, предоставляемой devise gem. – Vishal

+0

@ siegyy22 Не работает. Но так или иначе, чтобы сделать эту работу, я должен написать ее на этой странице. Но я хочу записать его в файле. Coffee.erb. Есть ли у вас какие-либо идеи? Спасибо :) – Vishal

+0

@ siegy22 Да, я видел ваш ответ. Но я не запускал приложение в режиме производства. – Vishal

0

Файлы Javascript являются (более или менее) статическими файлами, которые будут выполняться браузером. Я не знаю, если вы когда-либо развертывали приложение rails в производстве. Вы запустите команду bin/rake assets:precompile, которая будет генерировать один (или более) массивный файл (ы) javascript. Итак, как вы узнаете текущего пользователя в это время? HTTP-запрос вообще отсутствует, так как может быть пользователь?

Так, чтобы сделать это, вы можете либо написать текущего пользователя в HTML-узел, а затем прочитать его снова с JavaScript (CoffeeScript) (на мой взгляд, является лучшим способом) или вы могли бы напечатать тег сценария в ваш вид, содержащий то, что вы хотите от своего пользователя.

Смежные вопросы