Rails控制器命名混乱

时间:2017-05-25 20:57:31

标签: ruby-on-rails

所以这是我一直试图解决的问题,但由于互联网对此有不同程度的解释,因此它并没有太多意义:

为什么@question小写,为什么它有@符号?

在同一行中,为什么会出现问题"问题" (大写,没有@符号?)

这里有详细解释吗?我通常理解@variables意味着它是一个实例变量并且在视图中可用。但这个其他资本化业务没有意义。但为什么控制器中有@instance变量?

def create
  @question = Question.new(question_params)
  @question.save 
  redirect_to @question
end

def show
  @question = Question.find(params[:id])
end

# private makes all the methods private, so they aren't accessible in the view..
private
  def question_params
    params.require(:question).permit(:title, :text)
  end

1 个答案:

答案 0 :(得分:1)

@在初始化时将变量声明为实例变量,也就是说从控制器到视图的变量,因此,如果您在控制器中说:

@question = Question.find(params[:id])

然后,您可以使用@

以相同的方式在视图中使用它
<%= @question %>

变量名称右侧的值是值,从模型Question开始,使用find方法,使用id“查找”问题等于您发送的params[:id]

这是您使用ActiveRecord访问模型的方式,您的模型将始终采用单数形式并大写。

如果你定义一个实例变量来键入你的模型“downcased”,你会看到Rails将它作为一个实例变量,并且无法在任何地方找到它。

为什么控制器中存在实例变量的原因是因为它是您可以在视图中使用变量的方式,否则您将无法访问它们。