我希望自动执行以下操作:
根据我的理解,这方面的工具是Rake和Thor,但是,我应该使用哪一个?
在我看来,耙子更具事实性和受欢迎程度.我听过有人推荐Thor.
这些如何在破败中相互对立?
我试图让我的rails应用程序(2.3.5)在Ruby 1.9上运行,我有这个函数在字符串上进行一些转换:
def replace_special_chars(downcase = true)
if downcase
string = self.downcase
else
string = self
end
string.gsub! /á|ã|à|ä|â/, 'a'
string.gsub! /é|è|ë|ê/, 'e'
string.gsub! /í|ì|ï|î/, 'i'
string.gsub! /ó|õ|ò|ô|ö/, 'o'
string.gsub! /ú|ù|ü|û/, 'u'
string.gsub! /ç/, 'c'
string.gsub! /&/, 'e'
string.gsub! /\s/, '-'
string.gsub! /[^a-zA-Z_0-9-]/, ''
string.gsub! /-(-)+/, '-'
string
end
Run Code Online (Sandbox Code Playgroud)
但是当我尝试启动服务器时,我收到了这个错误:
<internal:lib/rubygems/custom_require>:29:in `require':
/Users/.../lib/nzn_string.rb:11: invalid multibyte char (US-ASCII) (SyntaxError)
/Users/.../lib/nzn_string.rb:11: invalid multibyte char (US-ASCII)
/Users/.../lib/nzn_string.rb:11: syntax error, unexpected $end, expecting keyword_end
string.gsub! /á|ã|à|ä|â/, 'a'
^
Run Code Online (Sandbox Code Playgroud)
来自:29:在`require'
在ruby 1.9上执行此操作的正确方法是什么?我不知道我在这里失踪了什么
在Sinatra,是否可以content_type 'application/json'设置默认值?因为我正在写一个api.
在测试轨道模型中的getter/setter对时,我发现了一个很好的行为示例,我一直认为它很奇怪且不一致.
在这个例子中,我正在处理class Folder < ActiveRecord::Base.
Folder belongs_to :parent, :class_name => 'Folder'
在getter方法上,如果我使用:
def parent_name
parent.name
end
Run Code Online (Sandbox Code Playgroud)
...要么...
def parent_name
self.parent.name
end
Run Code Online (Sandbox Code Playgroud)
...结果完全一样,我得到了父文件夹的名称.但是,如果我使用getter方法...
def parent_name=(name)
parent = self.class.find_by_name(name)
end
Run Code Online (Sandbox Code Playgroud)
......父母变成零,但如果我用......
def parent_name=(name)
self.parent = self.class.find_by_name(name)
end
Run Code Online (Sandbox Code Playgroud)
......那么它的确有效.
所以,我的问题是,为什么你有时需要声明self.method,为什么你只能使用局部变量?
这似乎需要/使用self的ActiveRecord的不一致,我想明白这一点更好,所以我不觉得我一直在猜测我是否需要自行申报与否.您应该/何时不应该在ActiveRecord模型中使用self?
我在我的Rails应用程序(设计)上安装了一个gem.安装宝石后,我意识到我不需要它.
我想删除gem,它的依赖项以及它在我的应用程序上创建的文件.换句话说,我想将系统恢复到以前在gem之前的状态.我怎样才能做到这一点?(我正在使用Ruby on Rails 3.)
当我运行我的规格时,我正在寻找一种方法来抑制Ruby警告.
spec spec/models/account_spec.rb
Run Code Online (Sandbox Code Playgroud)
我收到警告,例如:
DEPRECATION WARNING: ActiveSupport::Dependencies.load_paths is deprecated, ...
warning: already initialized constant SOME_CONSTANT_NAME
Run Code Online (Sandbox Code Playgroud)
删除ActiveSupport警告很容易ActiveSupport::Deprecation.silenced = true.
作为spec命令的一部分,如何防止已初始化的常量警告?或者通过创建另一个spec可以抑制此类警告的文件.请记住,这些警告来自gem文件,因此我无法进入这些文件并将其包围起来Kernel.silence_warnings.
注意:
我知道抑制警告很糟糕.但是,当我spec从内部运行单个内容时,vim如果警告不会使我的屏幕混乱,那将会很好.
否则,它需要
h = {:a => 1, :b => 2.2}
h.each_with_index do |pair, i|
k = pair[0]; v = pair[1]
p k, v, i
end
Run Code Online (Sandbox Code Playgroud)
设置k和v这种方式似乎有点笨拙.它可以更简单或类似的东西
h.each_with_index do |[k,v], i|
Run Code Online (Sandbox Code Playgroud)
?
在--api我创建的rails 5中有一个错误
NoMethodError (undefined method `respond_to' for #<Api::MyController:0x005645c81f0798>
Did you mean? respond_to?):
Run Code Online (Sandbox Code Playgroud)
但是,在rails 4.2的文档中,它说http://edgeguides.rubyonrails.org/4_2_release_notes.html
respond_with和相应的类级别respond_to已被移动到响应者gem.将gem'responseders','〜> 2.0'添加到您的Gemfile中以使用它:
实例级的respond_to不受影响:
我正在调用实例方法.怎么了?
class ApplicationController < ActionController::API
end
# ...
class Api::MyController < ApplicationController
def method1
# ...
respond_to do |format|
format.xml { render(xml: "fdsfds") }
format.json { render(json: "fdsfdsfd" ) }
end
Run Code Online (Sandbox Code Playgroud) 我在Rails中进行电子邮件验证:
validates_format_of :email, :with => /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\z/i
Run Code Online (Sandbox Code Playgroud)
此外,我在前端进行HTML5验证,但电子邮件地址如
..abc@gmail.com
.abc@gmail.com
Run Code Online (Sandbox Code Playgroud)
仍然有效.我错过了什么?