【问题标题】:How to call ruby function more than once如何多次调用ruby函数
【发布时间】:2015-11-08 06:07:43
【问题描述】:

我有 ruby​​ 文本,它从 SQL 引号数据库中获取随机行,
后来我使用 javascript 在按钮单击时显示这个随机引用:
我的问题是我想在按下按钮时生成一个新的随机报价。有人告诉我我可以使用 jQuery 来做到这一点,但我对如何去做这件事非常迷茫。

在控制器中:

random_offset = rand(Quote.count - 1)
@random_quote = Quote.offset(random_offset).first

Javascript:

var generatedQuote = '"<%= @random_quote.quote %>" <br>  - <%= @random_quote.author %>'

function populateQuote(){
  $("#quoteArea").val(generatedQuote);
  $("#imagewrap h3").html(generatedQuote);
}

var quoteButton = document.getElementById('randomQuote');
quoteButton.addEventListener('click', function (){
  populateQuote();
});

【问题讨论】:

  • 在函数populateQuote()中移动第一行(var generatedQuote......)
  • 试过了,但 generateQuote 变量不会生成报价,控制器文本会。这只会渲染它。有什么想法吗?

标签: javascript jquery sql ruby-on-rails ruby


【解决方案1】:

您应该渲染所有引号并随机化客户端。 Javascript:

var quotes = <%= raw Quote.all.map {|q| [q.quote, q.author]}.to_json %>;
var random_quote = function(){
  var quote_item = quotes[Math.floor(Math.random()*quotes.length)];
  return '"'+quote_item[0]+'" <br>  - '+quote_item[1];
};

$("#randomQuote").click(function(){
  var new_random_quote= random_quote();
  $("#quoteArea").val(new_random_quote);
  $("#imagewrap h3").html(new_random_quote);
});

或者您应该在每次单击按钮时获取服务器,具体取决于可用的报价数量/您对 Web 应用程序的偏好。

【讨论】:

  • 除了添加这个之外,还有什么需要改变的吗?添加后,按钮单击功能仍然只能工作一次。有任何想法吗?非常感谢您的回复。
  • 此外,该数据库包含大约 75,000 条报价。在这种情况下哪种方法更好?
  • 好的,您应该删除所有代码(控制器 + javascript)并用它替换它。这会将所有 75,000 个引号放在一个 JS var 中,所以我猜这太多了。您应该创建一个系统,从服务器获取新的随机报价到 populateQuote() 函数
  • 非常感谢!完美运行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-28
  • 1970-01-01
  • 2022-11-02
  • 2012-02-21
  • 2021-08-02
相关资源
最近更新 更多