我有一个名为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方法,列出所有书籍?
我想从页面中获取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
最近我使用了由一个开发人员创建的一个很好的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)
最后一个问题本身就提出了一个单独的奖励问题,版本控制如何在并行发行版中工作?
在一个类似的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散列(它只显示为空) - 似乎是一个问题范围.
可以打开端口,网络文件,并且有插件允许在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作为其合并冲突编辑器(如果前者可行,应该正常工作,对吗?).
我在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排序?
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帐户上设置过滤器时,该过滤器是否会以非破坏性的方式主动和追溯地应用于所有报告?或者它是否只是以破坏性的方式开始过滤向前移动的结果(例如,对结果进行硬过滤而根本不保存过滤/排除的数据)?谢谢!
这是一个愚蠢的问题,但是,正如有人学习Rails(在PHP中捣乱几年),旨在构建一些严肃的应用程序但也进行内容管理,我很好奇这是一个简单的内容管理网站是什么样的一个人跑.
asynchronous ×1
atom-editor ×1
bash ×1
controller ×1
forms ×1
gem ×1
github ×1
hash ×1
heroku ×1
javascript ×1
jruby ×1
json ×1
newrelic ×1
postgresql ×1
routes ×1
ruby ×1
rubygems ×1
sanitize ×1
shell ×1
sinatra ×1
vagrant ×1
view ×1