在Java中,您可以重载构造函数:
public Person(String name) {
this.name = name;
}
public Person(String firstName, String lastName) {
this(firstName + " " + lastName);
}
Run Code Online (Sandbox Code Playgroud)
Ruby中有没有办法实现同样的结果:两个构造函数采用不同的参数?
我使用Ruby 1.9.2和Rails 3.0.5
我有以下错误:
不兼容的字符编码:ASCII-8BIT和UTF-8
它与我认为的数据库无关.
错误是在视图中惹恼这一行(只是一个div haml调用):
#content
Run Code Online (Sandbox Code Playgroud)
全栈:
ActionView::Template::Error (incompatible character encodings: ASCII-8BIT and UTF-8):
21: -flash.each do |name, msg|
22: =content_tag :div, msg, :id => "flash_#{name}"
23: %div.clear
24: #content
25: = yield
26: = render :partial => "layouts/grid_right" if render_grid_right?
27: = render :partial => "layouts/footer"
app/views/layouts/application.html.haml:24:in `_app_views_layouts_application_html_haml___4380000789490545718_2180251300_2717546578298801795'
actionpack (3.0.5) lib/action_view/template.rb:135:in `block in render'
activesupport (3.0.5) lib/active_support/notifications.rb:54:in `instrument'
actionpack (3.0.5) lib/action_view/template.rb:127:in `render'
actionpack (3.0.5) lib/action_view/render/layouts.rb:80:in `_render_layout'
actionpack (3.0.5) lib/action_view/render/rendering.rb:62:in `block in _render_template'
activesupport (3.0.5) lib/active_support/notifications.rb:52:in `block …Run Code Online (Sandbox Code Playgroud) 如何将字符串转换为类名,但仅限于该类已存在?
如果Amber 已经是一个类,我可以通过以下方式从字符串到类:
Object.const_get("Amber")
Run Code Online (Sandbox Code Playgroud)
或(在Rails中)
"Amber".constantize
Run Code Online (Sandbox Code Playgroud)
但NameError: uninitialized constant Amber如果Amber还没有上课,那么其中任何一个都会失败.
我的第一个想法是使用该defined?方法,但它不区分已存在的类和不存在的类:
>> defined?("Object".constantize)
=> "method"
>> defined?("AClassNameThatCouldNotPossiblyExist".constantize)
=> "method"
Run Code Online (Sandbox Code Playgroud)
那么在我尝试转换之前,如何测试字符串是否命名一个类?(好吧,begin/ rescueblock如何捕获NameError错误?太丑了?我同意......)
我试图使用Thin app服务器并遇到一个问题.
当nginx 代理使用proxy_pass http://my_app_upstream;应用程序对Thin(或Unicorn)的请求接收由nginx(http://my_app_upstream)发送的修改后的URL .
我想要的是从客户端传递原始URL和原始请求而不进行任何修改,因为应用程序非常依赖它.
nginx的" DOC说:
如果需要以未处理的形式传输URI,则应使用指令proxy_pass而不使用URI部分.
但我不明白如何配置,因为相关的示例实际上使用URI:
location /some/path/ {
proxy_pass http://127.0.0.1;
}
Run Code Online (Sandbox Code Playgroud)
那么请你帮我弄清楚如何保留客户端的原始请求URL?
所以在红宝石中你可以做Time.now + 10.hours ......
没有相当于秒和分钟?例如,Time.now + 15.mins.
str = "Hello? World?"
Run Code Online (Sandbox Code Playgroud)
预期产出是:
"Hello:) World:("
Run Code Online (Sandbox Code Playgroud)
我可以做这个: str.gsub("?", ":)").gsub("?", ":(")
有没有其他方法可以在单个函数调用中执行此操作?就像是:
str.gsub(['s1', 's2'], ['r1', 'r2'])
Run Code Online (Sandbox Code Playgroud) 我有一个具有:credits属性的User模型.我想要一个简单的按钮,通过一个名为"add"的路由将5添加到用户的信用点,这样/ users/3/add会将5添加到用户id = 3的信用点.
def add
@user = User.find(params[:id])
@user.credits += 5
redirect_to root_path
end
Run Code Online (Sandbox Code Playgroud)
这是我的控制器的相关部分.问题是,我不想调用@ user.save,因为我有一个before_save回调,它根据当前的UTC时间重新加密用户的密码.我只想简单地为属性添加5并避免回调,我从未想过这么简单的事情会如此困难.
编辑:
我将回调更改为:before_create,这是我的新控制器代码(相关部分):
def add
@user = User.find(params[:id])
@user.add_credits(5)
@user.save
flash[:success] = "Credits added!"
redirect_to root_path
end
Run Code Online (Sandbox Code Playgroud)
这是我在模型中的代码:
def add_credits(num)
self.credits = num
end
Run Code Online (Sandbox Code Playgroud)
编辑2:
好吧,这是一个验证问题,使"编辑"中的更改无法正常工作,但我仍然喜欢在没有回调的情况下更新原始问题的答案!
我在Jekyll中使用逻辑运算符但它不起作用.
第一页,第二页和第三页都使用相同的布局(多语言解决方案的一部分,效果很好,但需要使用逻辑循环进行布局控制以保持干燥.)
这是代码:
{% if page.type == "post" %}
{% include post.html %}
{% elseif page.class == "contact" %}
{% include contact.html %}
{% else %}
{{ content }}
{% endif %}
Run Code Online (Sandbox Code Playgroud)
如果我把它分解为一个else和一个if else设置,任何两个树,一切正常.但是一旦我使用第三个条件就会中断.我和Jekyll只限于两个条件?我可以进行重组以使case运算符适用,但我更愿意理解这里的基本问题.谢谢大家.