【问题标题】:How to pass id from javascript to rails forms如何将 id 从 javascript 传递到 rails 表单
【发布时间】:2013-12-25 09:55:31
【问题描述】:

我想将下拉列表中的选定值传递给fullcalendar plugin 和rails form

选择标签

<%= form_tag appointments_path, :html => {:id => "form-1"} do %>
  <%= select_tag(:worker_id, options_from_collection_for_select(@client.workers, :id, :name), :selected => @a, :style=>"width:170px;", :prompt => "Select Staff Member")%>
<% end %>

我将@a 变量通过ajax 传递给

<script>
$('#worker_id').change(function (e) {
        var a = parseInt($(this).val());
        alert(a);  
         $.ajax({
            type: "GET",        
            url:"/customers/new",
            data : { id: a },
            success:function(result){
                $('#content1').html("<%= escape_javascript(render :partial =>'form', :locals => ????) %>");
            }
        });          
        $('#calendar').fullCalendar('destroy');    
        RenderCalendar($(this).val());
    });
</script>

我不确定我是否以正确的方式进行操作。我想在form 中传递值:

<%= form_for(@customer) do |f| %>
  <%#= f.error_notification %>
  <div class="field">
    <%#= f.label :Service_Name %>
    <%#= f.collection_select :service_id, Category.where(:client_id => @client).order(:name), :services, :name, :id, :service_name %>
  </div>

<br /> <br />
  <%= f.fields_for :appointments do |builder|%>
    <fieldset>
    <% if @a!=0 %> 
    <%= builder.hidden_field :worker_id, :value=> @customer.worker_id %>
    <%= builder.hidden_field :client_id, :value=> @client.id%>
    <%= builder.label :price %>
    <%= builder.text_field :price %>
    <%= builder.label :Service_Name %>
    <%= builder.collection_select(:service_id, @a.order(:service_name), :id, :service_name, :include_blank => true, :multiple => true ) %>
   <% end %>
      <%= builder.label :appointment_date %>
      <%= builder.date_select :appointment_date %> <br />
      <%= builder.label :appointment_start_time %>
      <%= builder.time_select :appointment_start_time, ampm: true %> <br />
      <%= builder.label :appointment_end_time %>
      <%= builder.time_select :appointment_end_time, ampm: true %>
    </fieldset>
  <%end%>
<div class="field">
    <%= f.label :title %>
    <%= f.text_field :title %>
    </div>
    <div class="field">
   <%= f.hidden_field :worker_id, :value=>@customer.worker_id %>
  </div>

  <div class="form-actions">
    <%= f.button :submit, :class=>"btn btn-primary" %>
  </div>
<% end %>

【问题讨论】:

    标签: javascript jquery ruby-on-rails-3.2 ruby-on-rails-4


    【解决方案1】:

    如果我理解正确:您正在尝试根据从此处的选择标记中选择的用户使用您的 ajax 成功回调重新呈现 fullcalender jquery 插件:

    <%= form_tag appointments_path, :html => {:id => "form-1"} do %>
      <%= select_tag(:worker_id, options_from_collection_for_select(@client.workers, :id, :name), :selected => @a, :style=>"width:170px;", :prompt => "Select Staff Member") %>
    <% end %>
    

    您尝试执行此操作的方式存在固有问题。您视图中的任何嵌入式 ruby​​ 将在运行时仅运行一次。本质上,您的 escape_javascript(render partial..... 将不会运行,因为此时任何嵌入式 ruby​​ 都已完成运行。

    您可以做的是保留已有的 ajax 调用,但在“/customers/new”中运行渲染部分代码,而不是尝试在运行时之后的 ajax 回调中调用它

    render :partial =>'form', :locals => ????
    

    这将返回您想要放置在页面上的部分代码。使用您的 ajax,只需将其放在页面上,如下所示:

    success:function(result){
        $('#content1').html(result);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多