Ruby on rails Rails如何知道使用哪个变量
下面是mackenziechild.me的教程,这是Rails的初学者。例如,我用许多方法创建了一个PostController。然而,让我困惑的是,它们似乎有相同的变量@post。在这种情况下,程序实际上如何知道需要获取哪个正确的变量?当应用程序运行时,他们不会感到困惑吗Ruby on rails Rails如何知道使用哪个变量,ruby-on-rails,ruby,variables,Ruby On Rails,Ruby,Variables,下面是mackenziechild.me的教程,这是Rails的初学者。例如,我用许多方法创建了一个PostController。然而,让我困惑的是,它们似乎有相同的变量@post。在这种情况下,程序实际上如何知道需要获取哪个正确的变量?当应用程序运行时,他们不会感到困惑吗 class PostsController < ApplicationController def index @posts = Post.all.order('created_at DESC'
class PostsController < ApplicationController
def index
@posts = Post.all.order('created_at DESC')
end
def new
@post = Post.new
end
def create
@post = Post.new(post_params)
if @post.save
redirect_to @post
else
render 'new'
end
end
def show
@post = Post.find(params[:id])
end
private
def post_params
params.require(:post).permit(:title, :body)
end
end
class PostsController
Ikanyu,@post
变量是一个实例变量,即其范围仅限于在中定义的方法。因此,新方法中定义的@post
变量与show中定义的变量不同,因此在视图中访问这些不同的变量时不会出现任何问题
有关如何将这些变量传递到视图的更多信息,请参阅此链接:
在rails中,像
索引、新建、显示等这样的get
方法的每个操作在名为控制器
名称的相应文件夹中都有相应的视图
因此,当一个动作被调用时,他们的特定视图就会被调用
例如:-
它们应该是文件夹app/views/posts/
中的index.html.erb
视图,在该视图中可以访问实例变量@posts
在这一行中,Post.all.order('created_at DESC')
,Post
模型查询数据库,从表中获取所有记录,作为posts
,并按照created _at
列的降序对记录进行排序
Post
模型继承自ActiveRecord::Base
,因此它可以映射数据库中的posts
表
def show
@post = Post.find(params[:id])
end
在上面的show
方法中,它只查询id位于params[:id]
中的一条记录
实例变量在视图中是可访问的,因此在@post=post.find(params[:id])
@post
的相应视图中可以使用show.html.erb
inapp/views/posts/
我已经用很多方法创建了一个PostController。但是,什么?
让我困惑的是,他们似乎有相同的变量@post。在这个
在这种情况下,程序如何真正知道它使用的是哪个正确的变量
需要得到什么?当应用程序启动时,他们不会感到困惑吗
跑步
当浏览器请求页面时,请求将路由到您定义的方法之一。该方法执行,并且该方法设置@post的值。将响应发送到浏览器后,rails将销毁所有创建的变量
但是我们有Post.new,Post.new(Post_参数),Post.find(参数[:id])I
来自Java背景。这让我很困惑。他们的区域
所有人都被分配到同一个@post
在Java中,您当然可以为同一个变量分配三件事:
int x = 1;
x = 2;
x = 3;
System.out.println(x); #=>3
Post p = new Post("hello");
System.out.println(p.getText());
p = new Post("world");
System.out.println(p.getText());
p = new Post("goodbye");
System.out.println(p.getText()); #=>goodbye
some_var = "hello" #String
some_var = 10 #Integer
some_var = [1, 2, 3] #Array
some_var = {a: 1, b: 2} #Hash
而且,如果您有一个名为Post的类,您还可以将三个不同的Post对象指定给同一个变量:
int x = 1;
x = 2;
x = 3;
System.out.println(x); #=>3
Post p = new Post("hello");
System.out.println(p.getText());
p = new Post("world");
System.out.println(p.getText());
p = new Post("goodbye");
System.out.println(p.getText()); #=>goodbye
some_var = "hello" #String
some_var = 10 #Integer
some_var = [1, 2, 3] #Array
some_var = {a: 1, b: 2} #Hash
Post.new
、Post.new(Post_参数)
和Post.find(params[:id])
返回一个Post对象;此外,它们被分配给同一个变量,那么为什么您会对来自Java背景的变量感到困惑呢
但是,您还应该注意,Rails使用了一种叫做ruby的语言,在ruby中,变量没有类型,也不需要声明。因此,在ruby中,您可以为同一个变量分配不同的类型:
int x = 1;
x = 2;
x = 3;
System.out.println(x); #=>3
Post p = new Post("hello");
System.out.println(p.getText());
p = new Post("world");
System.out.println(p.getText());
p = new Post("goodbye");
System.out.println(p.getText()); #=>goodbye
some_var = "hello" #String
some_var = 10 #Integer
some_var = [1, 2, 3] #Array
some_var = {a: 1, b: 2} #Hash
如果你说你被这样的事情弄糊涂了,那就更有意义了。然而,即使这样,还有什么值得困惑的呢?有两条简单的规则:
变量名没有类型
因此,您不必声明变量
我刚才说过:
当浏览器请求页面时,请求将被路由到
您定义的方法。该方法执行,并且该方法设置
@post的价值。将响应发送到浏览器后,rails
销毁创建的所有变量
在内部,工作方式是:
当url路由到某个控制器时,rails会创建该控制器类的实例:
obj=PostsController.new
Rails使用控制器实例调用控制器类中定义的方法之一(该方法由路由决定):
obj.show
(就像在Java中一样,当方法的名称为字符串时,可以使用多种方法调用该方法,而在ruby中则更为简单。)
该方法执行
将响应发送到浏览器后,rails将销毁控制器实例:
obj=nil
不知道你在问什么,所有的@post
变量都是相同的变量。但是我们有post.new,post.new(post_参数),post.find(params[:id]),我来自Java背景。这让我很困惑。它们都被分配到同一个@post。3个相同的变量名,但有3个不同的函数。你介意向我解释一下吗?谢谢!!!!!确实消除了我对这些变量的疑虑。:)再次感谢您!感谢您对ror和java并排进行比较的解释!你们真的很有帮助:)希望有一天我能像你们一样擅长编程。还有很多东西要学,我会继续努力的!谢谢,祝你今天愉快