小编rcd*_*rcd的帖子

在Rails 3中,当资源创建操作失败并调用render:new时,为什么URL必须更改为资源的索引URL?

我有一个名为Books的资源.它在我的路线文件中正确列为资源.

我有一个新动作,它给新视图标准:

@book = Book.new
Run Code Online (Sandbox Code Playgroud)

在模型上,有一些属性通过在线验证,因此如果保存操作失败,将生成错误.

在我的控制器中:

@book = Book.create
...  # some logic
if @book.save
  redirect_to(@book)
else
  render :new
end
Run Code Online (Sandbox Code Playgroud)

这是非常标准的; 以及使用render的基本原理:new是为了将对象传递回视图,并且可以报告错误,重新填充表单,等等.

这是有效的,除了每次我发送回表单(通过渲染:新),我的错误显示,但我的URL是INDEX URL,这是

/books
Run Code Online (Sandbox Code Playgroud)

而不是

/books/new
Run Code Online (Sandbox Code Playgroud)

这是我从一开始就开始的地方.我看过其他几个关于这个问题的帖子,但没有答案.至少,人们会认为它会落在/ books/create,我也有一个视图文件(在这种情况下与new相同).

我可以做这个:

# if the book isn't saved then
flash[:error] = "Errors!"
redirect_to new_book_path
Run Code Online (Sandbox Code Playgroud)

但随后@book数据以及错误消息将丢失,这是表单和操作等的全部要点.

为什么渲染:新的登陆我的/ books,我的索引动作,通常该URL调用INDEX方法,列出所有书籍?

forms controller routes ruby-on-rails view

57
推荐指数
2
解决办法
1万
查看次数

如何在加载图表后抓取Google Visualization DataTable数据?

我想从页面中获取Google Chart数据,将其转换为CSV,然后将其移交给下载程序.

在chartpage.js中

function downloadCSV(args) {
  var csvData, filename, link;
  var action = args.action_name;
  var csv = convertArrayOfObjectsToCSV({
    action_name: action
  });
  filename = args.filename || 'export.csv';

  csvData = encodeURI(csv);

  link = document.createElement('a');
  link.setAttribute('href', 'data:text/csv;charset=utf-8,' + csvData);
  link.setAttribute('type', 'data:text/csv;charset=utf-8');
  link.setAttribute('download', filename);
  link.click();
 }
Run Code Online (Sandbox Code Playgroud)

然后在chart.coffee中:

 init_chart = ->
   chart = new google.visualization.BarChart(document.getElementById('chart_div'));  //#chart_div in chart.html.haml

render_chart = (items, year)->
  @data = new google.visualization.DataTable()
  data.addColumn 'string', I18n.t('charts.name')

  // Other logic for building chart from Rails DB Data

  for key_item in items
  label = …
Run Code Online (Sandbox Code Playgroud)

javascript asynchronous ruby-on-rails google-visualization export-to-csv

13
推荐指数
1
解决办法
271
查看次数

在Github上分配Ruby/Rails gem的正确协议/礼仪是什么,可以作为一个持续的并行分支维护?

最近我使用了由一个开发人员创建的一个很好的gem,它在Github上托管.

在我的工作中,我不得不对其进行大幅修改,增加了一些改进.有些是针对特定项目的,有些是针对特定于宝石的,有些则是独立的改进.

对于特定于gem的改进(例如,bug修复),我分叉了repo,应用了修复,并发出了一个pull请求.

然而,然而,我注意到独立的改进类型属于原始宝石的平行,持续的分叉.为了更清楚,你以前见过它; 我重写了原始gem的视图以使用Twitter Bootstrap框架.所以,我也把它推到Github,但是,当然,没有提出拉取请求 - 相反,我更新了README来解释不同的东西,并归功于宝石的原始作者.

我的问题是,在这种情况下应该做什么,假设gem是其他任何人想要使用的东西,并且要在rubygems上发布等等?我是否应该简单地编辑.gemspec并保持原作者的信息不变,但是将我的信息增加到作者/电子邮件字段,并重写其他更改的内容?或者应该完全重写.gemspec?

此外,如果原始发行版具有远程测试框架(如travis.yml),是应该删除它们还是留下它们?

是否有其他文件通常必须更改/重新创建?

到目前为止我已经更新了

.gemspec
README.md
CHANGELOG.md
lib/libraryname/VERSION.rb #called as a constant in .gemspec
Run Code Online (Sandbox Code Playgroud)

最后一个问题本身就提出了一个单独的奖励问题,版本控制如何在并行发行版中工作?

ruby gem rubygems ruby-on-rails github

10
推荐指数
1
解决办法
600
查看次数

我如何消毒进入Sinatra应用程序的所有参数?

在一个类似的Rails应用程序中,我能够创建一个递归的哈希检查函数,然后运行Sanitize gem的clean/fragment方法从传入的params哈希中删除任何HTML元素.我在application_controller中使用了一个前置过滤器,所以一切都在应用程序范围内被清除(这是一个很棒的应用程序).

背景故事:XSS攻击是可能的,特别是在IE浏览器中,但实际上我们不希望任何这些东西被保存到数据库中.虽然最终目标是JSON输出不包含它.

我试图在Sinatra应用程序(它有一些ActiveSupport和JRuby ActiveRecord捆绑在一起)中做同样的事情,但是Sanitize gem不会捆绑,因为这个特定的应用程序在JRuby中运行由于某些数据库原因.Sanitize需要Nokogiri,而Nokogiri又需要Nokogumbo,后者不会在这个JRuby环境中构建.

因此我尝试使用Rack :: Util内置的html转义方法在app.rb中进行前置过滤,但这会炸毁应用程序.

有没有其他方法可以考虑

1)将所有传入的参数消毒到(JRuby)Sinatra应用程序中

如果没有,一个较小的选择:

2)使所有被解析的JSON清理所述JSON属性值列表中的值?

PS - 这里的部分问题是,一个包含的本地gem,它处理了许多params并进行JSON渲染,证明无法调试.我将在主机应用程序和本地链接的宝石中包含Pry,当我尝试撬入宝石时,我无法查看params散列(它只显示为空) - 似乎是一个问题范围.

hash json jruby sanitize sinatra

8
推荐指数
1
解决办法
1254
查看次数

Vagrant:如何通过来宾shell中的命令在主机上运行脚本?

可以打开端口,网络文件,并且有插件允许在Vagrant的配置过程中运行guest或host [shell]命令.

我想做的是能够(可能通过bash别名)在Vagrant guest虚拟机/ VM中运行命令,并在主机上执行命令,理想情况是在命令行上传递变量.

示例:在我的主机中,我运行Atom编辑器(同样适用于TextMate,无论如何).如果我想处理VM中的共享文件,我必须在主机中手动打开该文件,方法是直接在编辑器中打开它,或者运行'atom filename'shell命令.

我想要奇偶校验,所以在VM内部,我可以运行'atom filename',这会将文件名传递给VM外部的'atom $ 1'脚本,在主机中,并在我的主机编辑器(Atom)中打开它.


注意:我们使用Salt进行流动供应,使用NFS进行安装,以获得它的价值.当然,ssh与关键.

奖金问题:使用.gitconfig作为其合并冲突编辑器(如果前者可行,应该正常工作,对吗?).

bash shell vagrant atom-editor vagrant-plugin

6
推荐指数
1
解决办法
2299
查看次数

错误:别名中存在“ pitch_count”列时不存在

我在Rails 5中运行以下查询,目的是寻找音高最高的用户:

User
  .select("users.*, COUNT(user_id) as pitch_count")
  .unscoped
  .joins("LEFT JOIN pitches AS pitches ON pitches.user_id = users.id")
  .group("pitch.user_id")
  .order("pitch_count DESC")
  .limit(5)
Run Code Online (Sandbox Code Playgroud)

但是我得到了错误:

Caused by PG::UndefinedColumn: ERROR:  column "pitch_count" does not exist
Run Code Online (Sandbox Code Playgroud)

为什么查询不能按pitch_count排序?

postgresql ruby-on-rails

2
推荐指数
1
解决办法
95
查看次数

是否有必要从Google Analytics中过滤掉New Relic网站的可用性?

New Relic在此处列出其User-Agent标头和IP地址:

https://newrelic.com/docs/alerts/availability-monitoring
Run Code Online (Sandbox Code Playgroud)

User-Agent标头是

NewRelicPinger/1.0 (your_account_id)
Run Code Online (Sandbox Code Playgroud)

但遗憾的是,我找不到任何关于通过给定用户代理标头简单过滤Google Analytics的方法的共识.所以,我想知道,当New Relic设置为检查网站可用性时,是否需要阻止来自GA结果的New Relic?我已经过滤了我的Papertrail日志,因为看到请求每5-10秒出现就很烦人.在Google Analytics中,我看到一些奇怪的位置结果,我认为它可能与NR有关,但我不确定.由于我没有找到任何一篇文章提到这一点,我想知道谷歌是否自动知道过滤NR ping或其他东西,可能是由于其User-Agent标题.任何人都知道是需要手动完成,还是应该单独留在Google Analytics中?我认为这将非常相关,因为New Relic和GA在许多Heroku/Rails设置中都将成为该课程的标准,以及强大的可用性监控功能.

同样,有人知道,在GA帐户上设置过滤器时,该过滤器是否会以非破坏性的方式主动和追溯地应用于所有报告?或者它是否只是以破坏性的方式开始过滤向前移动的结果(例如,对结果进行硬过滤而根本不保存过滤/排除的数据)?谢谢!

google-analytics ruby-on-rails heroku newrelic

1
推荐指数
1
解决办法
745
查看次数

什么是Michael Hartl的Rails教程网站编程?

这是一个愚蠢的问题,但是,正如有人学习Rails(在PHP中捣乱几年),旨在构建一些严肃的应用程序但也进行内容管理,我很好奇这是一个简单的内容管理网站是什么样的一个人跑.

ruby-on-rails

0
推荐指数
1
解决办法
427
查看次数