как я могу выполнить действие по обмену в Rails?

#javascript #ruby-on-rails #ajax

#javascript #ruby-on-rails #ajax

Вопрос:

Я хочу передать collection_select значение с помощью link_to_remote метода. Когда я это сделал, я получил внутреннюю ошибку сервера. Я использую Rails 2.3.8. Мой код:

  <%= collection_select("event", "trainer_id", @trainers , :id, :name, {:prompt => 'Select a Trainer'}, {:onchange=> "#{link_to_remote(:url => {:controller => 'events', :action => 'find_new' }, :with=>"'trainer_id=' value")}"}) %>
  

Добавлено

Это мой код контроллера:

 def find_new
@trainers= Trainer.all
if ["0"].include?(params[:trainer_id])
    render :partial=>'events/me'
    else
    render :partial=> 'events/something'
    end
end
  

Ответ №1:

onchange будет ожидать javascript, вы предоставляете a элемент HTML с вашим link_to_remote .

Я предполагаю, что вы хотели бы перенаправить пользователя на выбранную вами страницу?

 <%= collection_select("event", "trainer_id", @trainers , :id, :name, {:prompt => 'Select a Trainer'}, {:onchange=> "redirectToTrainer(this.value)"}) %>

<%= javascript_tag do %>
  function redirectToTrainer(trainerId){
     window.location = "<%= url_for(:controller => 'events', :action => 'find_new') %>?"   trainerId;
  } 
<% end %>
  

Есть более чистые способы сделать это, например, ненавязчивый Javascript, но я думаю, что это то, что вы ищете.

Комментарии:

1. Я сделал это … но я все еще получаю ошибку. Я добавляю свой код контроллера выше. почему я получил эту ошибку?

2. Не могли бы вы опубликовать трассировку стека ошибки, пожалуйста? Возможно, в вашем collection_select синтаксическая ошибка? Кроме того, чего вы пытаетесь достичь именно в find_new? Я бы не рекомендовал получать всю коллекцию трейнеров, если вы просто пытаетесь выяснить, является ли это одним?

3. Я не получил никакой трассировки стека… Я получил эту ошибку от firebug. Я сделал этот код внутри всплывающего окна. Он использовал jQuery. Я хочу получить все трейнеры…

4. Если вы перейдете к своей консоли, вы должны увидеть трассировку стека, если вы получаете ошибку 500 из браузера.