- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我以前更像是一个爱好 Java 的人,现在尝试切换到 Ruby on Rails。但我遇到了一些困难,不管你信不信,我喜欢大括号和分号..给出了一些方向。
但问题是:现在我正在学习 RoR 的在线类(class),我突然想到,我在如何使用符号、哈希等方面总是错的。
示例 1:例如,让我们看一下这一行代码:
form_for(:session, :html => {class: "form-horizontal", role: "form"}, url: login_path)
我是这样读的:
方法/函数名称是
form_for
解析到这个方法的参数是:
:session, :html => {class: "form-horizontal", role: "form"}, url: login_path
让我们把它们分解成
:session
:html => {class: "form-horizontal", role: "form"}
url: login_path
我到底应该怎么知道如何声明这些参数?为什么 :session 和 :html passend 作为键而不是 url?:html 符号是 Hashmap 符号吗?
在模型文件中,您声明这样的 n:m 关系(例如用户 <-> 股票)
has_many :users, through: :user_stocks
好的,我知道第一个参数是 :users,第二个参数与
:through => :user_stocks
正确吗?
但以同样的方式,让我们看一下来自同一项目的 routes.rb 配置:
resources :user_stocks, except: [:show, :edit, :update]
现在我们在 except 散列上使用一个键数组,对吗?写问题时确实会变得更清楚,但仍然有关于何时使用的经验法则/约定
:name
name: value
:name => {values}?
name: [values]
还是只是个人喜好?在那种情况下,我应该希望我的在线老师保持一致。
一般来说,我对参数语法约定如何以及何时使用什么(什么类型的参数)感到很困惑。仅仅是因为我开始使用 Ruby 还是我错过了一些惯例。
我希望我的问题是可以理解的,请原谅我的英语不是母语。我真的很喜欢与 RoR 相处,但现在观看在线类(class)有时会让我比以前更加困惑,因为如果我自己完成,我会使用完全不同的方式。
最佳答案
How the heck should I know how to declare those parameters?
您在文档中查找该方法并了解它。
Parameters parsed to this method are:
:session,
:html => {class: "form-horizontal", role: "form"},
url: login_pathHow the heck should I know how to declare those parameters? Why are :session and :html passend in as keys and url not? Is the :html symbol a Hashmap-symbol?
在 ruby 中,如果您在参数列表的末尾传入一系列键值对,ruby 会将它们全部收集到一个散列中,并将它们作为一个参数传递给该方法。这是一个例子:
def go(x, y)
p x
p y
end
go(:hello, a: 10, b: 20)
--output:--
:hello
{:a=>10, :b=>20}
另一个例子:
def go(x, y)
p x
p y
end
go(
:session,
:html => {class: "form-horizontal", role: "form"},
url: 'xyz'
)
--output:--
:session
{:html=>{:class=>"form-horizontal", :role=>"form"}, :url=>"xyz"}
has_many :users, through: :user_stocks
Ok, I get that the first argument is :users and the second is the same as
:through => :user_stocks
correct?
正确。在旧的 ruby 中,哈希中的键值对是这样写的:
'a' => 'hello'
如果值是一个符号,那么它看起来像这样:
'a' => :hello
如果键也是一个符号,那么你写道:
:a => :hello
在现代 ruby 中,如果键是一个符号,你可以这样写:
a: 'hello'
这是一个快捷方式:
:a => 'hello'
如果值也是一个符号,在现代 ruby 中它看起来像这样:
a: :hello
这是一个快捷方式:
:a => :hello
resources :user_stocks, except: [:show, :edit, :update]
Now we're using an array of keys on the except hash, correct?
散列没有命名为 except
,但除此之外你是正确的。
a rule of thumb / convention on when to use
:name # Single symbol argument
name: value # A key-value pair in a hash. The key is a symbol.
:name => {values}? #A key-value pair in a hash. The value looks like a hash, but the syntax is incorrect.
name: [values] #A key-value pair in a hash. The value is your notation for an array.Or is it just an personal preference? In that case I should hope that my online teacher stays consistent..
再一次,可以定义一个方法来接受任何类型的参数。因为 ruby 变量没有类型,所以你必须查看文档。如果一个方法希望您传入一个散列,其中键 :name 的值是一个散列,那么您需要这样做。另一方面,如果该方法希望您传入一个散列,其中键 :name 的值是一个数组,那么您需要这样做。
Generally speaking, I'm very confused on how the parameter syntax convention is and when to use what (what type of argument). Is it just because I am starting with Ruby or did I miss some piece of convention.
Ruby 有很多快捷方式,可能会让初学者感到困惑。然后是整个 String v. Symbol
概念。如果您能理解 Symbol 和 String 之间的实际区别,那么您将领先于游戏。 Symbol 就像一个整数。所以当ruby要比较Symbols是否相等的时候,ruby比较两个整数,速度很快。如果 ruby 必须比较字符串,那么 ruby 必须将一个字符串中每个字母的 ascii 码与另一个字符串中每个字母的 ascii 码进行比较,直到 ruby 发现不同为止。例如,为了让 ruby 比较以下两个字符串:
"helloX" v. "helloY"
在 进行了六次整数比较之前,ruby 不会发现差异:
'h' v 'h' => equal
'e' v 'e' => equal
...
...
'X' v 'Y' => not equal
另一方面,如果 ruby 正在比较:
:helloX v. :helloY
Symbols 基本上存储为单个整数,例如:
341343 v. 134142 => not equal
比较它们只需要一次整数比较,所以速度更快。正如肯定有人指出的那样,这并不是 Symbols 的实现方式,但细节并不重要。知道 Symbol 比较比 String 比较快就足够了,至于为什么这是真的,上面的例子足以证明至少有一个实现可以是真的。
关于ruby-on-rails - Ruby on Rails 和 Colons 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44187411/
sanitize 是什么意思在 Rails 中是什么意思? 我正在阅读 CanCanCan 的文档.它说: When using strong_parameters or Rails 4+, you
在过去的几个月里,我感觉自己对 Ruby on Rails (RoR) 开发的了解达到了极限。我为大/小客户和 friend /爱好项目开发了大大小小的应用程序。我知道如何开发这些应用程序,但开始感觉
我昨天参加了一个关于扩展 Rails 的聚会,其中一个主题是 Hexagonal Rails。然而,我只做了一年的 Rails,对 MVC 结构非常满意(也许太舒服了),所以我不太了解适配器和消息队列
我使用多个 Rails 应用程序,一些在 Rails 3.2/Ruby 2.0 上,一些在 Rails 2.3/Ruby 1.8.7 上。 他们的共同点是,随着他们的成长和添加更多的依赖项/ gem
这个问题在这里已经有了答案: Using Rails-UJS in JS modules (Rails 6 with webpacker) (5 个答案) 关闭 3 年前。 我正在尝试使用 UJS
我正在开发一个当前使用 Rails 1.2 的 Rails 应用程序,所以我现在离最新的稳定版本(Rails 2.3)还有很长的路要走。 我应该如何进行迁移到更新版本的 Rails 的过程? 我应该一
尝试按照 Ryan Bates Backbone.js 教程构建抽奖应用程序,但我已经遇到了第一段代码的问题。在 application.js 的 init 函数中,他初始化了 Raffler 路由的
我正在使用 Rails 3.2 并且我有一个数据库表,我想在其中找到符合以下条件的所有行: a = true and b = true and ( 0 true, :b =>
我有一个用户类和一个联系人,其中联系人是用户的子类。这两个类都存储在用户表中。 我的联系人可能有也可能没有电子邮件地址,而我的用户需要一个电子邮件地址(我的用户模型定义中有 validates_pre
我正在编写一个教程,我在其中演示了一些 rails 命令。在我的机器上 rails和 script/rails两者都同样有效。有“首选”形式吗?两者中哪一个更普遍? 最佳答案 当您运行 rails 时
我正在寻找有关通过我的应用程序前进的最佳方式的建议,这是我首次开始集成Elasticsearch。我是一名初学者,但是热衷于深入研究,以便原谅任何明显的错误! 我遵循了http://www.sitep
我刚刚用 Rails new 启动了一个新的 Rails 应用程序,将默认数据库设置更改为 PostgresSQL。我用 bin/rails s 启动服务器,结果很奇怪 2016-04-21 05:0
我收到一个参数并希望它是这样的字符串: "abc,efg" 或者像这样的数组 ["abc","efg"] 在第一种情况下,我想将它转换成一个数组,什么是好的方法? 这是我的想法 if params[:
我刚刚用 Rails new 启动了一个新的 Rails 应用程序,将默认数据库设置更改为 PostgresSQL。我用 bin/rails s 启动服务器,结果很奇怪 2016-04-21 05:0
我收到一个参数并希望它是这样的字符串: "abc,efg" 或者像这样的数组 ["abc","efg"] 在第一种情况下,我想将它转换成一个数组,什么是好的方法? 这是我的想法 if params[:
我有 Rails 4,这是我的默认版本(我仍然希望它是)。但我不想在我的电脑上添加 rails 3.2。在以下命令中:gem install rails -v 3.2.16 我有这个警告: railt
您好,我想使用 Sheevaplug 构建一个“Rails Brick”来自 Marvell(操作系统是开箱即用的 Ubuntu,但您可以在其上安装其他发行版)。它将成为家庭服务器和静音、低成本(99
我需要能够从 Rails 控制台发送我的 Rails 应用程序的 Postgres 数据库中所有未接受的邀请。 (我有一个名为 Invitations 的表,其中包含一个名为 accepted 的 b
validate :cannot_modify_if_locked, on: :update def cannot_modify_if_locked if self.locked erro
我正在学习教程(学习 Rails 播客),需要更改以下路由语法,以便它与 Rails 3.0 兼容。谁能帮忙? map.view_page ':name', :controller => 'viewe
我是一名优秀的程序员,十分优秀!