Rails根据collection_select值

时间:2016-06-22 15:54:44

标签: javascript ruby-on-rails forms

我对Rails相对较新,我一直在论坛上寻找看似永远的东西,但我找不到解决问题的方法。这可能只是因为我作为开发人员缺乏经验,但我很感激任何人都可以提供的任何帮助。

我正在构建一个具有轮次模型的应用程序,每轮都有许多投资者(这是一个单独的模型)。此外,还有一个Stock模型,其中包含有关投资者购买的股票类型的各种数据。已经建立了模型之间的所有必要关系。

当我创建新投资者时,我试图根据已选择的股票类型自动填写表单。这是表格:

//app/views/investors/new.html.erb
<%= form_for(@investor) do |f| %>
  <%= render 'shared/error_messages', object: f.object %>

  <%= f.label :security_name %>
  <%= f.collection_select :stock_type, Stock.all, :id, :security_name, prompt: true, class: 'form-control' %>

  <%= f.label :share_price %>
  <%= f.number_field :share_price, :readonly => true, class: 'form-control'%>

  <%= f.submit "Add Investor", class: "btn btn-primary" %>
<% end %> 

表单中的第一个字段是一个下拉框,允许用户选择投资者购买的股票类型。这是正常运作的。

我无法弄清楚(以及我需要帮助的是)如何自动将number_field的值设置为所选股票类型的股价。我知道它需要某种形式的Javascript,但我尝试过的所有东西都没有产生功能输出。

我遇到的部分问题是,当我阅读对其他人的问题的回复时,我并不完全确定在何处放置已建议的代码 - 因此这些信息也会有所帮助。

使用Rails版本4.2.2

1 个答案:

答案 0 :(得分:0)

假设share_price的逻辑很简单。我只想使用数据字段将该值添加到select的所有标记中。

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> <a href="http://www.freesfx.co.uk/rx2/mp3s/5/16797_1460740933.mp3">SOUND-1</a> <script> // Add buttons and otherwise manipulate the dom function LinkToAudio(p_element, p_callback) { var audioURL = $(p_element).attr('href'); var audioName = $(p_element).text(); // Dom for the audio tag var audioTag = '<audio src="' + audioURL + '" type="audio/mpeg" preload="none"></audio>'; // Dom for the play button var audioPlayButton = '<button id="audio">Play Sound above</button>'; // Add a audio tag and play button after the element $(p_element).after('<br/>' + audioTag + '<br/>' + audioPlayButton + '<br/>'); // Add the callback to the button $(p_element).nextAll('button:first').on('click', p_callback); } // Define our button click handler function AudioButtonHandler(evt) { // Once clicked, find the first audio tag located before the button var relativeAudioTag = $(evt.target).prevAll('audio:first')[0]; console.log(evt.target, relativeAudioTag); // Play the sound! relativeAudioTag.play(); } var thisAudio = $('a[href$="mp3"]:last'); LinkToAudio(thisAudio, AudioButtonHandler); </script> <a href="http://www.freesfx.co.uk/rx2/mp3s/5/16983_1461335348.mp3">SOUND-2</a> <a href="http://www.freesfx.co.uk/rx2/mp3s/4/16539_1460655601.mp3">SOUND-3</a> <script> // Add buttons and otherwise manipulate the dom function LinkToAudio(p_element, p_callback) { var audioURL = $(p_element).attr('href'); var audioName = $(p_element).text(); // Dom for the audio tag var audioTag = '<audio src="' + audioURL + '" type="audio/mpeg" preload="none"></audio>'; // Dom for the play button var audioPlayButton = '<button id="audio">Play Sound above</button>'; // Add a audio tag and play button after the element $(p_element).after('<br/>' + audioTag + '<br/>' + audioPlayButton + '<br/>'); // Add the callback to the button $(p_element).nextAll('button:first').on('click', p_callback); } // Define our button click handler function AudioButtonHandler(evt) { // Once clicked, find the first audio tag located before the button var relativeAudioTag = $(evt.target).prevAll('audio:first')[0]; console.log(evt.target, relativeAudioTag); // Play the sound! relativeAudioTag.play(); } var thisAudio = $('a[href$="mp3"]:last'); LinkToAudio(thisAudio, AudioButtonHandler); </script>

然后在表单上方或适当的investor.js.coffee文件中的javascript snipet中。

#!/usr/bin/perl use strict; my $file = 'file.txt'; my $mark = '0'; open my $f, "<$file" or die "Error open file: $!\n"; my $counter=0; while(my $line = <$f>) { if($line =~ /$mark/) { $counter++; } } if($counter) { my $body = "status $mark has been recorded $counter times"; my $cmd_email = "echo $body | mailx -s \"error occurring\" tneal01\@gmail.com"; system($cmd_email) == 0 or die "Error sending email -- $!"; }

除了潜在的语法错误。这应该让你接近你想要的。