Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.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_Model View Controller - Fatal编程技术网

Ruby on rails 从命名约定到实例变量?

Ruby on rails 从命名约定到实例变量?,ruby-on-rails,model-view-controller,Ruby On Rails,Model View Controller,我有一个型号ProductFeature 名为product\u feature\u controller.rb的控制器 我正在为此控制器编写CRUD的“编辑”方法。在编辑方法中,我创建了一个名为@productFeature的实例变量,并将其设置为productFeature.find(:id),然后将此实例变量发送到我的视图中,供(:product\u feature)的表单使用。我发现我的表单不会用我正在提取的记录中的当前数据填充其字段。经过几个小时的仔细观察,我意识到我的错误完全在于我的

我有一个型号
ProductFeature

名为
product\u feature\u controller.rb的控制器

我正在为此控制器编写CRUD的“编辑”方法。在编辑方法中,我创建了一个名为
@productFeature
的实例变量,并将其设置为
productFeature.find(:id)
,然后将此实例变量发送到我的视图中,供(:product\u feature)
表单使用。我发现我的表单不会用我正在提取的记录中的当前数据填充其字段。经过几个小时的仔细观察,我意识到我的错误完全在于我的实例变量


它应该命名为@product\u feature,而不是@productFeature。这似乎是一个琐碎的细节,但我真的想知道为什么会这样。这到底是怎么回事?我的意思是Rails如何知道根据实例变量的命名方式填充表单?我希望我的问题是清楚的,只是想寻求进一步的启发。

因为符号
:产品功能
(在
表单
中)将基于该符号查找实例变量。它不进行任何转换,将查找
@product\u功能
变量。只要它们匹配,你就可以了,但是Ruby世界在单词之间使用下划线


此外,按照惯例,模型应以大写字母命名,
ProductFeature
。我不知道这是否会引起任何问题,但这与正常情况背道而驰。

谢谢,先生,非常有用。现在,为了清楚起见,我必须将我的符号写为:product\u feature,以便我的“form\u for”标记找到要使用的正确模型,对吗?我不可能只把我的符号写为“:productFeature”就解决了这个问题而不创建另一个?你是对的,型号名称确实以大写开头。我在问题中解决了这个问题,谢谢。@guide33没有尝试过,但是如果模型变量是
@productFeature
,符号是
@product\u feature
,我希望它能工作。很容易尝试(并报告回来!)是的,它似乎工作得很好。我想这意味着只有在我从表单中保存参数时才引用实际模型。所以我可以随意命名符号和我的实例变量,只要它们彼此匹配,Rails约定会被保留。@Guided33 Mmm,no;我认为表单标记帮助程序使用该实例变量来重新填充表单,比如在验证错误时,或者在编辑时填充表单。Rails的惯例是使用下划线——但您是正确的,只要匹配,您就可以:)