在阅读了下面的问题(Ruby on Rails中的授权标题,使用密钥HTTP_AUTHORIZATION而不是授权进行访问?)我遇到了与OP类似的问题,但建议的答案似乎并没有解决我的问题.
我在本地托管服务器(通过Postman)的调用中定义了一个自定义标头:
@Igor:我实际上使用Postman,所以我只是添加了curl代码来演示我做了什么.我想最好包含一个截图:
这是我的控制器中的代码,它试图读取所述标题:
def authenticate_through_header
custom_header_value = request.headers['custom_header']
end
Run Code Online (Sandbox Code Playgroud)
但是,这回归nil
.另一方面,request.headers['HTTP_CUSTOM_HEADER']
返回值.根据我最初链接的问题,我应该能够通过在括号[]中传递名称来获取值 - 这是在较新的Rails版本中已经更改的内容吗?
干杯:-)
更新:它还可以通过以下方式访问变量:request.headers['custom-header']
.所以显然它可以用连字符替换下划线,这似乎很奇怪.
在阅读David Heinemeier Hansson 关于服务器生成的javascript 的博客文章后,我决定回顾一下我在Rails应用程序中进行AJAX调用的方法.David建议创建一个.js.erb
模板,它只是嵌入了服务器上生成的ruby代码的javascript,而不是在客户端javascript中进行任何DOM操作.
另一种方法当然是简单地在客户端执行所有操作,并且(例如)从服务器返回表示更新对象的JSON对象,并使用javascript来执行所有DOM操作.
我不喜欢第一种方法有两个原因:
1)我在我的应用程序中使用HAML和Coffeescript,并且觉得通过使用vanilla javascript和ERB会不断地使用不同语言的代码膨胀我的代码库(也许可以创建.coffee.haml模板而不是js.erb,我不知道)
2)我真的不喜欢"乱丢"我的视图文件夹的想法,主要是javascript文件,嵌入了一点ruby.
正如大卫在他的博客文章中谈到的那样,第二种方法非常依赖于客户端javascript,这可能导致客户端javascript代码膨胀,并且可能需要客户端模板,在最坏的情况下可能意味着几乎是模板数量的两倍.
我决定采用的方法(并且想询问是否完全是愚蠢的方式)如下:
1)设置remote: true
标志以使链接和表单利用AJAX发布到服务器.
2)在我的控制器中,将所有内容作为html处理,如果请求是AJAX请求,则只需在没有布局的情况下呈现:render partial: '<partial-name>', layout: false if request.xhr?
.这只是返回partial的HTML,并评估ruby代码.
3)在资产javascript文件(例如<partial-name>.js.coffee
)中,监听ajax:success
并附加响应中的HTML.
我喜欢这种方法,因为(在我相当简单的应用程序中)这允许我将所有代码保存在HAML/Coffeescript中,并避免使用任何javascript模板.
我意识到如果应用程序的复杂性增长,这个问题可能会有不同的特征,但我仍然认为这是一个有效的问题:这是一个不好的方法来为Rails应用程序实现基于AJAX的架构(如果是这样的话) ,为什么?即有什么理由为什么从AJAX调用返回HTML而不是JSON是一个坏主意?)或者这是我应该继续使用的东西?
谢谢 :-)
所以,我想为我的sinatra
应用程序完全自定义日志记录,但我似乎无法禁用Rack::CommonLogger
.
根据sinatra文档,我应该做的是添加以下行(尝试将其设置false
为):
set :logging, nil
Run Code Online (Sandbox Code Playgroud)
到我的配置.但这不起作用,我仍然在终端中收到类似Apache的日志消息.所以我到目前为止找到的唯一解决方案是修补该死的东西.
module Rack
class CommonLogger
def call(env)
# do nothing
@app.call(env)
end
end
end
Run Code Online (Sandbox Code Playgroud)
任何人都有任何想法,如果有可能禁用这个没有重新处理这些问题?
这是我的(简化)app.coffee
:
app.set('views', __dirname + '/app/views')
app.set('view enigne', 'jade')
app.listen 8000
Run Code Online (Sandbox Code Playgroud)
但是,当我在浏览器中访问我的应用程序时,我收到以下错误消息:
Error: No default engine was specified and no extension was provided
Run Code Online (Sandbox Code Playgroud)
编辑:事实证明我是一个白痴,错误拼写"引擎".感谢@lascort指出它!
因此,这就是问题所在:http : //bildr.no/view/927562
仔细看看:http : //bildr.no/view/927563
如您所见,每个角的边框变为不可见。这是图像的CSS代码:
#contentImage {
float: left;
border: 1px solid #C4C4C4;
border-radius: 8px;
margin-right: 25px;
}
Run Code Online (Sandbox Code Playgroud)
<img src="images/image.jpg" id=contentImage" />
任何帮助将大大赞赏:-)
这是我渲染部分的代码(正确生成了@parties集合,我测试过了):
<% @parties.each do |party| %>
<div class="item">
<%= render 'parties/party', :object => party %>
</div>
<% end %>
Run Code Online (Sandbox Code Playgroud)
这是部分代码:
<%= party.name %>
Run Code Online (Sandbox Code Playgroud)
但是,我收到以下错误:
undefined method `name' for nil:NilClass
Run Code Online (Sandbox Code Playgroud)
我在我的智慧结束,有人请求帮助: - |
此外,这是控制器呈现包含部分视图的控制器的代码(控制器名为default_controller):
def index
@parties = Party.all
end
Run Code Online (Sandbox Code Playgroud)
这不是party_controller,这有什么后果吗?
我们使用@Casraint.Required来验证表单的字段,这会生成ValidationError - 这一切都很好.此错误有一个标准错误消息(error.required),它与以下字符串相关联:"此字段是必需的".
但是,我们想要控制这个字符串并(可能)覆盖它 - 我们怎么能这样做?我们的conf/-folder中有一个消息文件,其中包含以下行:
error.required = dummytext
Run Code Online (Sandbox Code Playgroud)
但错误消息仍然显示"此字段是必需的" - 即使正在读取消息文件(我们做了一些测试).
我们如何覆盖这些消息?
谢谢!
我最近读完了实用程序员(http://goo.gl/UyKMTm)后,我决定尝试应用本书中描述的一些技巧,更具体地说,我决定应用本书中的一个技巧. :即使用一个编辑器,并且知道该编辑该死的.
选择的武器/编辑器显然是相当重要的,我想避免学习说记事本的每个功能,只是为了发现它最终并没有真正削减它(我猜记事本不是那么可配置).我真的不打算将此作为"编辑X比编辑Y更好"的问题,而是一个让人们讨论他们选择的编辑的论坛 - 权衡利弊.
我知道像vim和emacs这样的编辑在经验丰富的程序员中是一个相当受欢迎的选择,我正在考虑使用其中任何一个,但学习曲线有点让我失望.
我决定选择Sublime Text作为我的通用编辑器,只是因为我觉得它涵盖了可配置,可扩展和可编程的要求,我喜欢它的外观和感觉.
但是,如果有人能给我任何理由为什么使用Sublime作为我的通用编辑器将是彻头彻尾的愚蠢,或者是否真的值得花几个小时学习有效地使用vim而不是直接破解和削减崇高,我真的很感激:-)
干杯!
# routes.rb
resources :assets, only: [:new, :create, :delete]
# asset.rb
class Asset < ActiveRecord::Base
belongs_to :post
end
# rake routes
Prefix Verb URI Pattern Controller#Action
post_comments POST /posts/:post_id/comments(.:format) comments#create
new_post_comment GET /posts/:post_id/comments/new(.:format) comments#new
posts GET /posts(.:format) posts#index
POST /posts(.:format) posts#create
new_post GET /posts/new(.:format) posts#new
edit_post GET /posts/:id/edit(.:format) posts#edit
post GET /posts/:id(.:format) posts#show
PATCH /posts/:id(.:format) posts#update
PUT /posts/:id(.:format) posts#update
DELETE /posts/:id(.:format) posts#destroy
post_form POST /post_form(.:format) posts#form
root GET / posts#index
Run Code Online (Sandbox Code Playgroud)
没有路由显示assets
,但我需要能够删除它们而不指定post_id,因为它们可以在没有帖子的情况下存在(为了能够在新帖子中上传文件和接收这些文件所必需的).
路线assets#new
和assets#create
工作正常,但不是assets#destroy
(我得到一个错误说DELETE …
ajax ×1
coffeescript ×1
css ×1
css3 ×1
editor ×1
emacs ×1
express ×1
http ×1
javascript ×1
node.js ×1
partials ×1
pug ×1
puma ×1
rack ×1
ruby ×1
sinatra ×1
sublimetext ×1
validation ×1
vim ×1