:key => "value"(hashrocket)和key: "value"(Ruby 1.9)符号之间有什么区别吗?
如果没有,那么我想使用key: "value"符号.有没有宝石可以帮助我转换:x =>为x:符号?
使用Ruby时,我总是和它混在一起:.
当有人在变量名称之前使用它时,有人可以解释一下吗:name,当我想在变量之后使用它时name:?
一个例子是崇高的.
使用ruby 1.9.3,字符串键似乎不适用于Hash冒号表示法:
1.9.3p194 :005 > {abc: 5}
=> {:abc=>5}
1.9.3p194 :004 > {'abc': 5}
SyntaxError: (irb):4: syntax error, unexpected ':', expecting tASSOC
{'abc': 5}
^
Run Code Online (Sandbox Code Playgroud)
我想我正在运行正确版本的Ruby
1.9.3p194 :006 > RUBY_ENGINE
=> "ruby"
1.9.3p194 :007 > RUBY_VERSION
=> "1.9.3"
Run Code Online (Sandbox Code Playgroud) 我有以下内容:
@permission = @group.permissions.create(
:user_id => @user.id,
:role_id => 2,
:creator_id => current_user.id)
Run Code Online (Sandbox Code Playgroud)
如何更新它find_or_create,以便如果此记录已存在,则分配给@permission它,如果不存在,则创建记录?
我正在为电影名称存储创建一个Ruby哈希.
当哈希的键是包含空格的字符串时,它可以正常工作.
如:
movies = {"Avatar" => 5, "Lord of the rings" => 4, "Godfather" => 4}
现在我试图用符号替换字符串的使用:
movies = {Avatar: 5, Lord of the rings: 4, Godfather: 4}
显然这不起作用.
Ruby如何处理符号命名中的空格?
我在{key: 'value'}整个代码中使用哈希语法编写Ruby gem .我的测试全部通过1.9.x,但我(可以理解)进入syntax error, unexpected ':', expecting ')'1.8.7.
是否有支持1.8.x的最佳实践?我是否需要使用我们的老朋友重写代码=>,还是有更好的策略?
Railscast 第275集 - 我如何测试使用以下代码向用户发送密码重置:
def send_password_reset
generate_token(:password_reset_token)
....
... etc
end
def generate_token(column)
begin
self[column] = SecureRandom.urlsafe_base64
end while User.exists?(column => self[column])
end
Run Code Online (Sandbox Code Playgroud)
我的问题是倒数第二行代码:end while User.exists?(column => self[column])它的工作原理很好,但是如果换掉哈希火箭就会导致我的规格失败,即end while User.exists?(column: self[column])
Failure/Error: user.send_password_reset
ActiveRecord::StatementInvalid:
SQLite3::SQLException: no such column: users.column: SELECT 1 FROM "users" WHERE "users"."column" = 'Y7JJV4VAKBbf77zKFVH7RQ' LIMIT 1
Run Code Online (Sandbox Code Playgroud)
为什么会这样?是否有必须使用哈希火箭的情况,是否有任何指导方针?
对不起,我甚至不确定如何提出这个问题..所以,如果你可以提出这个问题,我们将不胜感激.
# A. WORKS, but "stockroom" is hardcoded
render partial: association.to_s.singularize + '',
locals: {stockroom: new_object}
# B. WORKS, but uses old syntax
render partial: association.to_s.singularize + '',
locals: {association.to_s.singularize.to_sym => new_object}
# C. does NOT work
render partial: association.to_s.singularize + '',
locals: {association.to_s.singularize.to_sym: new_object}
# D. does NOT work
ass = association.to_s.singularize.to_sym
logger.debug "--- ass: #{ass.inspect} (#{ass.class})"
# => --- ass: :stockroom (Symbol)
render partial: association.to_s.singularize + '', locals: {ass: new_object}
Run Code Online (Sandbox Code Playgroud)
并不是旧语法是坏事,我只是想知道是否有办法使用新语法(甚至通过中介(即屁股))来做到这一点.
我最近问了一个关于在新页面中打开链接的问题(继续链接).我发现有两个答案.
:target => '_blank'
target: "_blank"
Run Code Online (Sandbox Code Playgroud)
我希望有人可以解释单引号和双引号之间的区别以及为什么上述两种方法都有效.我理解第二个选项只能在更新版本的rails上实现(我使用的是3.2.2).
有人能指出我只是解释Ruby/Rails中不同语法特征的好的入门读物吗?例如,我看到的一些例子myMethod(x: "z")和其他例子怎么做myMethod(:x => "x")?
一般来说语法对我来说似乎很奇怪,只是寻找一个快速的一目了然的参考作为备忘单.