Ruby on rails 我做得对吗?
我知道符号和字符串是不一样的,但我不理解符号的概念 据我所知,符号指的是其他东西。我在这里使用reference这个词是为了更好地理解,而不是在C/C++指针或引用的意义上Ruby on rails 我做得对吗?,ruby-on-rails,ruby,Ruby On Rails,Ruby,我知道符号和字符串是不一样的,但我不理解符号的概念 据我所知,符号指的是其他东西。我在这里使用reference这个词是为了更好地理解,而不是在C/C++指针或引用的意义上 当我在Rails中创建一个新的控制器时,使用类似于Rails g controller Posts,Ruby是否会自动创建一个新的符号:Posts,它指的是Posts控制器?这是从应用程序中的任何位置全局访问的:posts符号吗?只有在这种情况下,我才能理解这样的结构: resources :posts 哪个Ruby可以
Rails g controller Posts
,Ruby是否会自动创建一个新的符号:Posts
,它指的是Posts
控制器?这是从应用程序中的任何位置全局访问的:posts
符号吗?只有在这种情况下,我才能理解这样的结构:
resources :posts
:posts
指的是posts\u controller
,所以我需要为该控制器创建CRUD路由”。我说得对吗
:title
和:content
具有哪些角色?我假设form.label
等同于form.label(:title)
Ruby是否创建了一个新符号:something
,它将引用方法something
?如果这是正确的,为什么我需要那个符号,我在哪里可以使用它
@posts = Post.all #Or Post.all() => Standard OOP approach, i know what happens here
@posts1 = Post.find(:all) # Dont know what happens here
关于@posts1
,我在这里做什么?:这里的all
是什么意思?Ruby知道它必须从DB中提取每个Post
,这是一个常量值(不是字符串)吗:all
是Symbol
类的实例,它是内置的Ruby类。全部
@posts1 = Post.find(:all)
行是不推荐的将所有帖子加载到@posts1
变量的方式<代码>:all符号表示要获取所有帖子。如果键入:
@post = Post.find(5)
你只能得到一个帖子,id=5的帖子
:all
是Symbol
类的实例,它是内置的Ruby类。全部
@posts1 = Post.find(:all)
行是不推荐的将所有帖子加载到@posts1
变量的方式<代码>:all符号表示要获取所有帖子。如果键入:
@post = Post.find(5)
你只能得到一个帖子,id=5的帖子 Ruby中的A
Symbol
只是一个具有特殊语法的不可变字符串。它的主要用途是在执行字符串匹配操作时使用较少的内存,如:
options = { :me => 'joe' }
puts options[:me]
如果使用字符串,则会为:me
创建一个符号:
options = { 'me' => 'joe' }
puts options['me']
由于Ruby中的字符串是可变的,因此会创建两个字符串。所以,不,这没有什么特殊的意义,也不是指其他东西,这主要是对Ruby中的字符串在默认情况下是可变的这一事实的攻击
至于您的最后一个问题,:all只是一个值,该方法在类似“a==:all?返回所有内容:因此是其他内容”的内容中实现。它只是一个方法参数。Ruby中的
符号
只是一个具有特殊语法的不可变字符串。它的主要用途是在执行字符串匹配操作时使用较少的内存,如:
options = { :me => 'joe' }
puts options[:me]
如果使用字符串,则会为:me
创建一个符号:
options = { 'me' => 'joe' }
puts options['me']
由于Ruby中的字符串是可变的,因此会创建两个字符串。所以,不,这没有什么特殊的意义,也不是指其他东西,这主要是对Ruby中的字符串在默认情况下是可变的这一事实的攻击
至于您的最后一个问题,:all只是一个值,该方法在类似“a==:all?返回所有内容:因此是其他内容”的内容中实现。它只是一个方法参数。符号只是一个不可变的插入字符串,这意味着具有相同值的所有符号变量都指向完全相同的内存位置。它们也不会被垃圾收集,因此避免使用
创建它们。它们经常被用作哈希表中的键,但这里有一个问题-您将从外部库(例如API客户端)接收的一些哈希表具有字符串作为键,因此当您尝试获取与obj[:some_属性]一起使用的值时
您将得到nil
符号只是一个不可变的内部字符串,这意味着具有相同值的所有符号变量都指向完全相同的内存位置。它们也不会被垃圾收集,因此避免使用创建它们。它们经常被用作哈希表中的键,但这里有一个陷阱-您将从外部库(例如API客户端)接收的某些哈希表具有字符串作为键,因此当您尝试获取与obj[:some_属性]
一起使用的值时,您将得到nil
符号与字符串相同,但是具有相同值的内存地址相同。这是一个关键的区别
puts 'string'.object_id
puts 'string'.object_id
puts 'string'.object_id
#=> 3099310
#=> 3099310
#=> 3099310
puts :symbol.object_id
puts :symbol.object_id
puts :symbol.object_id
#=> 3098410
#=> 3021341
#=> 3012440
下一个
同
Post.find 'all'
:posts不是对posts\u控制器的引用
resources :posts
这是什么意思?资源是一种生成标准CRUD路由的方法。对于搜索控制器,它使用命名约定。如果资源名为:posts,则路由将设置为PostsController 符号与字符串相同,但具有相同值的符号具有相同的内存地址。这是一个关键的区别
puts 'string'.object_id
puts 'string'.object_id
puts 'string'.object_id
#=> 3099310
#=> 3099310
#=> 3099310
puts :symbol.object_id
puts :symbol.object_id
puts :symbol.object_id
#=> 3098410
#=> 3021341
#=> 3012440
下一个
同
Post.find 'all'
:posts不是对posts\u控制器的引用
resources :posts
这是什么意思?资源是一种生成标准CRUD路由的方法。对于搜索控制器,它使用命名约定。如果资源名为:posts,则路由将设置为PostsController 我会推荐你看看这个博客
除了符号和字符串定义之外,您还可以通过示例获得更多详细信息。我建议您看看这个博客
除了符号和字符串定义之外,您还可以通过详细示例了解更多信息。另请参见:您确实混淆了Ruby语言,以及Rails利用Ruby的功能所做的事情<代码>:符号是Ruby的一部分,是节省内存和提高速度的核心功能。Rails基于这些原因生成符号。我强烈建议暂时不要使用Rails,而要专注于Ruby,直到你学会了Rails的“魔力”