Отправить переменные JavaScript на рельсы? - PullRequest
6 голосов
/ 14 апреля 2011

Мне нужно заполнить переменную javascript для контроллера.Например, если мой код в представлении выглядит следующим образом -

    ...  <script type="text/javascript">
           variable_test = 'hello'
         </script> 
    ...

Мне нужен контроллер для получения variable_test, например -

 def hello
 @variable_test = #Some code
 # @variable_test => 'hello'
 end

Представление, конечно, привет, и 'Некоторый код - это то, что я не знаю, как делать.

Ответы [ 3 ]

4 голосов
/ 14 апреля 2011

Вы не можете отправить клиентский код контроллеру, если вы не получили или отправили какую-либо запись. Попробуйте использовать пост jQuery или получить методы. Если вы не используете jQuery, вы можете сделать что-то вроде этого:

var variable_test = 'hello';
var el = document.createElement('script');
el.setAttribute('src', 'path_to_controller' + '?variable_test=' + variable_test);
document.body.appendChild(el);

тогда в вашем контроллере вы сделаете:

@varliable_test = params[:varliable_test]

Синтаксис может быть немного неправильным, но вы получите общее представление.

1 голос
/ 14 апреля 2011

Прежде всего, вам нужно как-то вызвать контроллер.Либо данные находятся в форме, и вы отправляете форму, либо вы делаете AJAX-вызов из javascript.В первом случае вы захотите использовать JavaScript, чтобы добавить скрытый ввод в форму с нужным именем и значением.Во втором случае данные, которые вы отправляете вместе с запросом AJAX, должны включать нужную пару имя-значение.Я не могу получить более конкретную информацию, не зная больше о том, что вы делаете;отправляете ли вы форму или используете AJAX, и если вы используете AJAX, используете ли вы библиотеку javascript или используете какой-либо из встроенных помощников Rails для ajax (например, remote_function).

В любом случае, хотя, вы хотите завершить запрос, который включает пару имя-значение "varliable_test = hello".Затем вы просто делаете

@varliable_test = params[:varliable_test]

, чтобы получить доступ к значению в вашем контроллере.

(Я должен также отметить, что, вероятно, вы имеете в виду «переменная», а не «переменная», но, очевидно,это не влияет на функциональность, пока вы последовательны.)

0 голосов
/ 02 апреля 2013

Я тоже искал ответ на этот вопрос.В одном из моих приложений мне нужно получить данные из автозаполнения мест Google.Этот подход выглядит для меня идеальным решением (кредит Thaha kp: Как передать переменную javascript в код erb в представлении js? )

Просмотр:

<script type="text/javascript">
  var variable_test = 'hello';
  $(document).ready(function() {
    $('#model_variable_test').val(variable_test);
  });
</script>

...

<%= form_for :model do |f| %>
  ...
  <%= f.hidden_field :variable_test %>
  ...
<% end %>

Контроллер:

def hello
  @variable_test = params[:model][:variable_test]
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...