Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 我做得对吗?_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails 我做得对吗?

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可以

我知道符号和字符串是不一样的,但我不理解符号的概念

据我所知,符号指的是其他东西。我在这里使用reference这个词是为了更好地理解,而不是在C/C++指针或引用的意义上

  • 当我在Rails中创建一个新的控制器时,使用类似于
    Rails g controller Posts
    ,Ruby是否会自动创建一个新的符号
    :Posts
    ,它指的是
    Posts
    控制器?这是从应用程序中的任何位置全局访问的
    :posts
    符号吗?只有在这种情况下,我才能理解这样的结构:

    resources :posts
    
  • 哪个Ruby可以自己翻译:“好的,我知道
    :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的“魔力”