ruby-on-rails - Ruby on Rails 中的变量语法
问题描述
我正在阅读 ruby on rails 教程,但我仍然对语法有些困惑。
class PostController < ApplicationController
def index
@posts = Post.all
end
def create
@post = Post.new(post_params)
end
private
def post_params
params.require(:post).permit(:title, :body)
end
end
我来自 javascript 背景。
根据我对从模型文件夹中的类实例化@posts
的@
变量的理解。Post
但是:post
,均值到底是什么:
意思,从何params
而来,又是什么?
解决方案
这里有两件事。一种是实例变量,或@
- 前缀变量。这些是对象实例的本地。对同一个对象实例调用的任何方法都@posts
可以访问它。这些不在对象实例之间共享。
如果你熟悉 JavaScript,这很像this.posts
这this
部分的意思是“这个对象的本地”而不是“一些名为posts
”的变量。
Rails 使用这些作为从控制器到视图共享数据的一种方式。您定义的任何实例变量都会传播到可以使用它们的视图实例。这是 Rails 独有的行为。
这个:post
东西是一个符号,或者一个内部化的字符串。从概念上讲,符号只是代表该特定名称的常数。的每个实例都:post
指向同一个对象,因此这意味着它们在存储方面非常便宜,并且比较是微不足道的。
在比较两个字符串时,需要做更多的工作。"post" == "post"
需要比 做更多的计算:post == :post
。您会看到很多在 Ruby 哈希结构中使用的符号键,它们通常用于表示事物,例如方法调用或类名,如 inbelongs_to :model_type
等。
将它们视为“单例字符串”。
Ruby 编程语言更奇特的事情之一是它对符号的依赖程度以及符号很容易与字符串混淆,因为许多方法会采取非此即彼的方式,而另一些则非常特殊。
当你在概念上习惯它们时,它们真的很方便,但它不是你在其他语言中看到的,比如 C++、Python、JavaScript 或你拥有的语言。
推荐阅读
- sql - DB2 - 自治存储过程
- jquery - 使侧边栏在页面滚动时保持粘性
- nvd3.js - 如何在非丑陋模式下在 X 轴上绘制时间?
- javascript - 与多个 where 条件一起使用时,Firebase Firestore OrderBy 不起作用
- omnet++ - 模块 LteMacEndRealisticD2D 中的错误:out_of_range 向量
- c# - 从 C# 对 RPG 程序的调用是否同步?
- php - PHP 避免重复相同的 try catch
- node.js - 排序在 mongoDB 和 Nodejs 中不起作用
- r - 如何在r中将多个Hexbin图排列在一起?
- java - 消费者期待 List 的回应
使用协议