如何在Rails 4.0表单中显示所选记录的关联值

时间:2016-06-23 23:46:00

标签: jquery ruby-on-rails ruby ruby-on-rails-3

我是RoR的新手,目前正在为业余体育俱乐部经理开发一款免费应用,帮助他们跟踪付款。此应用程序显示相关的玩家数据和收取费用(tarifa)付款的表格。我想在付款之前显示付款概念的费用。这是包含表单和HTML生成的应用视图:form for pagos

这是pagos_controller.rb' new'动作:

def new
  @pago = Pago.new
  @conceptos = Concepto.all
  @jugador = Jugador.find_by(id: params[:jugador_id])
end

这是在views / pagos / new.html.erb中呈现的views / pagos / _form.html.erb:

<%= form_for(@pago) do |f| %>
 <% if @pago.errors.any? %>
  <p> All the error showing logic is omitted here for simplicity </p>
 <div class="field-tm">
   <%= f.label :concepto %>
   <%= f.collection_select :concepto, @conceptos, :name, :name %>
 </div>
 <div class="field-tm">
   <%= f.label :tarifa %> <div id="la-tarifa"> </div>
 </div>
 <div class="field-tm">
   <%= f.text_field :cantidad, :placeholder => "Cantidad a pagar" %>
 </div>
 <%= f.hidden_field :jugador_id, :value => params[:jugador_id] %>
 <div class="actions">
  <%= f.submit "Registrar Pago", class: "btn btn-default"%>
 </div>
<% end %>

这是pagos架构......

create_table "pagos", force: :cascade do |t|
  t.string   "concepto"
  t.decimal  "cantidad"
  t.integer  "jugador_id"
  t.datetime "created_at", null: false
  t.datetime "updated_at", null: false
end

概念架构:

create_table "conceptos", force: :cascade do |t|
  t.string   "name"
  t.decimal  "tarifa"
  t.datetime "created_at", null: false
  t.datetime "updated_at", null: false
end

我需要在&#39; collection_select&#39;中选择值。用它来找到像

中那样的概念&tarifa
@conceptos.find_by(name: theConceptoName).tarifa

并将其放入

$("#la-tarifa").text(tarifa)

显示价值,但不知道如何获得&#39; theConceptoName&#39;适用于

的变量
<%= f.collection_select :concepto, @conceptos, :name, :name %>

我尝试了几种方法,然后我想出了jQuery方法来获取价值,所以它会是这样的:

$("#pago_concepto").change( function(){
  var miConcepto = $("#pago_concepto").value();
  do the @conceptos search for miConcepto and get the tarifa;(*)
  $("#la-tarifa").text(tarifa);
});

但是如何在pagos.cofee代码中执行查询(*)以从@conceptos获取tarifa值...我已经做了很多谷歌研究,但我发现每个答案都让我更加困惑。 请帮帮我。

1 个答案:

答案 0 :(得分:0)

试试这个,只需一个简单的ajax find:

JS:

driver.get('insert url of iframe here')

pagos_controller:

$("#pago_concepto").change( function(){
  var miConcepto = $("#pago_concepto").value();
  $.getJSON('/tarifa/' + miConcepto, function(data) {
    $("#la-tarifa").text(data.tarifa);
  });
});

routes.rb中:

def tarifa
  tarifa = Concepto.find_by(name: params[:concept_name]).tarifa
  respond_to do |format|
    format.json { render json: {tarifa: tarifa} }
  end
end

如果你愿意,可以相对容易地将js转换为coffeescript。