2017-07-04 55 views
-1

我有一个问题,在铁轨我Ajax调用,当我使用的form_tag或的form_for发送Ajax调用的form_tag在轨

我的form_tag的样子:

` <%= form_tag(type_name_Tous_path, :method => "get") do %> 
     <%= text_field_tag :key,params[:key]" %> 
     <%= text_field_tag :lieu,params[:lieu]" %> 
     <%= select_tag :nom, options_from_collection_for_select(TypeName.all, :id, :nom, params[:nom]),id:"select_categori"%></span> 
     <button id="input_btn"><%= submit_tag "Chercher"%></button> 
     <ul id="sous_select"> 
      <% @tag %> 
     </ul> 
    <% end %>` 

我Ajax调用的样子:

` $(function(){ 
     $(".selectable").selectable({ 
      selected: function(event, ui){ 
       var selected=$("li[class$='ui-selected']").val(); 
       $('#input_btn').click(function(){ 
        alert(selected); 
        if(selected != null){ 
         $.ajax({ 
          url:'/type_name/Tous', 
          type:'Get', 
          data:{my_ta:selected}, 
          success:function(data){ 
           alert(data) 
          }, 
          error:function(data){ 
           alert("erreur"+data) 
          } 
         }) 
        }else{ 
         console.log('pas de selection proposé') 
        }})}});});` 

而在我的控制器中,当我做出了“ok ok#{params [:my_ta]}”我有两个答案,第一个答案很好,例如“ok ok 9”,第二个答案后就像“好吧”,这是因为我c所有两次type_name路由?

回答

0

Rails可以为您提供帮助!

如果您使用form_with而不是form_tag,Rails会自动假定您的表单将使用ajax调用。

所以现在你将在你的控制器中有一个相应的动作,你指向你的路线。 例如,如果你的路线是这样的:

#routes.rb 
... 
# Bad practice to use capital letters in snake case, 
# only_small_letters_will_do 
get 'type_name' => 'your_controller#type_name', as: "type_name_tous" 

现在你的行动type_name会对提交表单PARAMS。

我建议把一个byebug在新type_name行动,并做了提交,看看您的PARAMS正在做:)

值都在那里,所以你没有做

var selected=$("li[class$='ui-selected']").val(); 

Read more about handling javascript in Rails

+0

感谢您的答复,我尝试您的建议,但它不起作用,你有其他选择吗? –

+0

是否有任何工作? 您可以将您的路线连接到控制器吗? 而您需要将标签更改为(作为示例)f.text_field。你知道怎么做吗? –