【问题标题】:Naming conventions down to the Instance Variables?命名约定到实例变量?
【发布时间】:2011-11-13 05:08:23
【问题描述】:

我有一个模特ProductFeature

一个名为product_feature_controller.rb的控制器

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

它应该被命名为@product_feature 而不是@productFeature。这似乎是一个微不足道的细节,但我真的很想知道为什么会这样。这甚至是如何工作的?我的意思是 Rails 如何知道根据实例变量的命名方式来填充我的表单?我希望我的问题很清楚,只是寻求进一步的启发。

【问题讨论】:

    标签: ruby-on-rails model-view-controller


    【解决方案1】:

    因为符号:product_feature(在form_for 中)将根据该符号查找实例变量。它不做任何转换,而是寻找一个@product_feature 变量。只要它们匹配,就应该没问题,但是 Ruby 世界在单词之间使用下划线。

    此外,按照惯例,模型应以大写字母ProductFeature 命名。我不知道这是否会导致任何问题,但这有悖常理。

    【讨论】:

    • 谢谢先生,很有帮助。现在为了清楚起见,我必须将我的符号写为':product_feature',以便我的'form_for'标签找到正确的模型来使用对吗?我不能只是将我的符号写为 ':productFeature' 并在不创建另一个问题的情况下解决了这个问题吗?
    • 你是对的,型号名称确实以大写开头。我在我的问题中修复了它,谢谢。
    • @Guided33 没试过,但是如果模型变量是@productFeature,符号是@product_feature,我希望它可以工作。很容易尝试(并报告回来!:)
    • 是的,它似乎工作正常。我想这意味着实际模型被引用的唯一时间是当我去保存表单中的参数时。所以我可以随意命名符号和实例变量,只要它们相互匹配,Rails 约定就会被保留。
    • @Guided33 嗯,不;我认为表单标签助手使用该实例变量来重新填充表单,例如在验证错误时,或者在编辑时进行填充。 Rails 约定是使用下划线——但你是对的,只要匹配就可以了:)
    猜你喜欢
    • 2011-12-21
    • 1970-01-01
    • 2018-04-23
    • 2020-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多