如何在视图中单击Rails时触发控制器中的方法?

时间:2017-12-08 03:58:57

标签: javascript jquery ruby-on-rails

我要点击的下拉列表元素是

<select class="store-select">
  <option value="" selected="selected">Please select</option>
  <option value="1">Administrator</option>
  <option value="2">User</option>
  <option value="3">Editor</option>
</select>

我想让它根据点击的选项在控制器中触发一个动作。因此,我希望学习的一件事是如何在控制器中访问该值。我还想在单击选项后重定向页面。当我在视图中单击其他链接时,我可以重定向页面,但是当我单击下拉列表中的某个元素时,它不会重定向。它甚至没有进入该方法的视图。单击下拉列表中的元素时,它将保留在当前页面上。

def practice  # the redirect doesn't work in this method but works in others 
    # redirect_to "https://tosbourn.com"
    render "ibotta/show"
end

我的application.js文件如下所示

$('.store-select').on('change', function() {
  $.ajax({
    url : '/users',
    type : 'GET',
    data : { user_id: this.value },
    dataType:'script'
  });
})

我的routes.rb文件包含以下内容

get 'users' => 'smiths#practice'

如果您想知道有关此问题的信息,请告诉我。谢谢。

2 个答案:

答案 0 :(得分:2)

如果您想重定向下拉更改,可以按照

进行操作

假设你的下拉是

<select name="select1" id="select1">
        <option value="0">Page1</option>
        <option value="1">Page2</option>
        <option value="2">Page3</option>
        <option value="3">Page4</option>
    </select>

并且您的java脚本更改事件是

$select1.on( 'change', function() {
  switch(this.value){
    case '0':
      window.location = [page1url];
        break;
      case '1':
      window.location = [page2url];
        break;
      case '2':
      window.location = [page3url];
        break;
      case '3':
      window.location = [page4url];
        break;
  }  
});

您将重定向到您想要更改的网址

答案 1 :(得分:1)

如果你在轨道上使用红宝石,那么你可以做一个短线,例如: -

<%your_options = [['Please select', ''],['Administrator','1'],['User','2'],['Editor','3']]%>

<%= select_tag "store-selects", options_for_select(your_options),:onchange => "self.location='/users/'+this.options[this.selectedIndex].value", class: "your_class" %>

,您的路线应为

get 'users/:id' => 'smiths#practice'
谢谢。